当前位置:   article > 正文

八段数码管动态显示(汇编+C语言)_汇编语言八位数码管动态显示

汇编语言八位数码管动态显示

显示数码管60S倒计时程序。

原理

数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱 动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp "的同名端连在一起,另 外为每个数码管的公共极 COM 增加位选通控制电路,位选通由各自独立的 I/O 线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是 那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我 们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数 码管就不会亮。 透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显 示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为 1~2ms, 由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同 时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会 有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且 功耗更低。

电路图

汇编代码

  1. ORG 0000H;程序入口地址
  2. AJMP START;跳转到START程序
  3. ORG 0040H
  4. START: MOV DPTR, #TAB;建表将TAB所在的地址赋值给DPTR
  5. MOV R1, #6;十位
  6. MOV R0, #0;个位
  7. AJMP DISPLAY
  8. TENS: MOV R0, #10;个位填充,十位减1
  9. DEC R1
  10. UNITS: DEC R0;个位减1同时填充R5
  11. MOV R5, #250
  12. DISPLAY:MOV A,R1
  13. MOVC A,@A+DPTR;基地变址寻址
  14. MOV P3,#0FEH
  15. MOV P2,A;显示
  16. LCALL DELAY
  17. MOV A,R0
  18. MOVC A,@A+DPTR;基地变址寻址
  19. MOV P3,#0FDH
  20. MOV P2,A;显示
  21. LCALL DELAY
  22. DJNZ R5,DISPLAY;每显示一个数用时大约1s
  23. CJNE R0,#0,UNITS;个位0不等于跳转
  24. CJNE R1,#0,TENS;十位0不等于跳转
  25. SJMP START
  26. DELAY: MOV R7,#250
  27. D1: MOV R6,#4
  28. D2: DJNZ R6,D2
  29. DJNZ R7,D1
  30. RET
  31. TAB:
  32. DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
  33. END

C语言代码

  1. #include <REGX52.H>
  2. unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,
  3. 0x6d,0x7d,0x07,0x7f,0x6f};//共阴不带小数点段码表
  4. void delay_ms(unsigned int ms)//ms延时函数
  5. {
  6. unsigned int i,j;
  7. for(i=ms;i>0;i--)
  8. for(j=110;j>0;j--);
  9. }
  10. void main()
  11. {
  12. while(1)
  13. {
  14. unsigned char i,j;
  15. for(i=60;i>0;i--)//60s
  16. {
  17. for(j=100;j>0;j--)//大约1s
  18. {
  19. P3=0xfe;//位选
  20. P2=tab[i/10];//显示十位
  21. delay_ms(5);
  22. P3=0xfd;//位选
  23. P2=tab[i%10];//显示个位
  24. delay_ms(5);
  25. }
  26. }
  27. }
  28. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/709363
推荐阅读
相关标签
  

闽ICP备14008679号