赞
踩
显示数码管60S倒计时程序。
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱 动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另 外为每个数码管的公共极 COM 增加位选通控制电路,位选通由各自独立的 I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是 那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我 们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数 码管就不会亮。 透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显 示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为 1~2ms, 由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同 时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会 有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且 功耗更低。
- ORG 0000H;程序入口地址
- AJMP START;跳转到START程序
- ORG 0040H
-
- START: MOV DPTR, #TAB;建表将TAB所在的地址赋值给DPTR
- MOV R1, #6;十位
- MOV R0, #0;个位
- AJMP DISPLAY
- TENS: MOV R0, #10;个位填充,十位减1
- DEC R1
- UNITS: DEC R0;个位减1同时填充R5
- MOV R5, #250
- DISPLAY:MOV A,R1
- MOVC A,@A+DPTR;基地变址寻址
- MOV P3,#0FEH
- MOV P2,A;显示
- LCALL DELAY
- MOV A,R0
- MOVC A,@A+DPTR;基地变址寻址
- MOV P3,#0FDH
- MOV P2,A;显示
- LCALL DELAY
- DJNZ R5,DISPLAY;每显示一个数用时大约1s
- CJNE R0,#0,UNITS;个位0不等于跳转
- CJNE R1,#0,TENS;十位0不等于跳转
- SJMP START
-
- DELAY: MOV R7,#250
- D1: MOV R6,#4
- D2: DJNZ R6,D2
- DJNZ R7,D1
- RET
- TAB:
- DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
- END

- #include <REGX52.H>
-
- unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,
-
- 0x6d,0x7d,0x07,0x7f,0x6f};//共阴不带小数点段码表
-
- void delay_ms(unsigned int ms)//ms延时函数
- {
- unsigned int i,j;
- for(i=ms;i>0;i--)
- for(j=110;j>0;j--);
-
- }
-
- void main()
- {
- while(1)
- {
- unsigned char i,j;
- for(i=60;i>0;i--)//60s
- {
- for(j=100;j>0;j--)//大约1s
- {
- P3=0xfe;//位选
- P2=tab[i/10];//显示十位
- delay_ms(5);
- P3=0xfd;//位选
- P2=tab[i%10];//显示个位
- delay_ms(5);
- }
-
- }
-
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。