赞
踩
1,目标
使用51单片机控制8位数码管,分别滚动显示单个数字0~7,程序运行之后,单片机先控制最左边的第一位数码管显示0,其他的熄灭,延时一段时间之后,控制左边第二个数码管显示1,其它熄灭,以此类推,反复循环上述过程。
2,设计方式
使用P0输出段码,P2输出位码,因为单片机的电流不足以点亮数码管,因此,我们可以通过使用由8个NPN型三极管组成的位驱动电路来对数码管进行位驱动和位控制扫描,话不多说,上程序
3,代码如下
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- uchar code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};//共阳数码管段码表 01234567
-
- //0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0 7~0
- void delay(uint t) //延时子函数
- {
- uchar i;
- while(t--) for(i=0;i<200;i++);
- }
-
- void main()
- {
- uchar i,j=0x80;//10000000
- while(1)
- {
- for(i=0;i<8;i++)
- {
- j=_crol_(j,1); //_crol_(j,1)——将j循环左移1位
- P0=dis_code[i]; //P0口输出段码
- P2=j; //P2口输出位控码
-
- delay(200);
- P0=0x00;
- }
- }
- }
4,仿真图如下
5,小结
由于数码管的余晖和人眼的“视觉暂留”,只要控制好数码管的显示时间并减小延时时间,即可实现8位数码管“同时点亮”的效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。