1、8位移完后点亮数码管=延时=返回第一步执行2. 中断部分: 进入中断=保存现场(以备调查取证,送你入狱_)=重置TCC=够1秒钟将需要显示的数据+1,并重置,不够就退出;根据以上要求就开始写代码调试了,要注意一点,数据移位时一定要记得高位在前哦,否则显示错误别怪我没有说清楚,我当年实验时就因为这个数据移位方向反了排查了半天,甚至以为是时钟频率不对,又以为时许不对.搞了半天,NND后来重看DATASHEET才发现,原来是低级错误啊,呜呼哀哉.,希望你不要重蹈我覆辙,哎哟! 谁! 谁扔砖头上来 啥 你扔的 我废话太多.,那俺少来两句,继续上菜, 咦好像没啥可说的了,上源程序吧1. ;中断部分:2.
2、 3. ;中断;4. INTPUT: 5. MOVTEMPA,A;6. A,130;7. TCC,A;255-130=1258. CLRRF;9. 此处填写250Us处理程序10. BSWKREG,T500US 11. ;12. DJZR1MS 13. JMPINTEXT;14. A,4 15. R1MS,A;重置16. WKREG,T1MS 17. 此处填写1ms处理程序18. 19. 20. R20MS 21. 22. A,20 23. R20MS,A;24. 此处填写1秒处理程序25. WKREG,T20MS 26. 27. R1S28. 29. A,50 30. R1S,A;31. 3
3、2. INCNUMBER 33. A,NUMBER 34. SUBA,10 35. JBSSR,236. INTEXT 37. A,0 38. NUMBER,A39. 40. 41. INTEXT:42. A,TEMPA;43. RETI;44. 45. 46. 47. 48. 49. ;显示部分:50. 51. ;=TXDATA=52. TXDATA:53. P5,CC1 54. A,8 55. DATALOP,A;56. TXLOP:57. BC58. P5,CLK;clk=高59. NOP;60. NOP61. DATA_BUF,762. $+3 63. P5,DATA;64. $+2
4、65. P5,DATA66. DD1MS:67. $-1 68. P5,CLK 69. 70. 71. $-1;72. RLCDATA_BUF 73. DATALOP 74. TXLOP 75. 76. 77. 78. 79. 80. 81. P5,CLK82. 83. 84. 85. RET;86. 87. ;数据查表88. ;=DSPTBL=89. DSPTBL:ADDPC,A90. RETL0B01000000;091. 0B01111001;192. 0B00100100;293. 0B00110000;394. 0B00011001;495. 0B00010010;596. 0B00
5、000010;697. 0B01111000;798. 0B00000000;899. 0B00010000;9100. 101. 102. ;循环体部分;103. 104. ;主程序;105. MLOOP:106. 107. CALLDSPTBL 108. DATA_BUF,A109. TXDATA 110. 111. 112. 113. 114. 115. JMPMLOOP;实例2在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。动态扫描方式需要x+y个IO(x*y个数码管的情况,一般x=8,y=位数)这种方法很浪费MPU的IO端口对于2051等20脚的芯片就很难实现。静态显示驱动法,
6、即是指每一个LED灯分别对应一个独立的IO驱动口,这种方法适用较少LED的驱动,不适合数码管驱动。还有一种利用74HC164来驱动的方法。74HC164是比较典型的移位寄存器,该移位寄存器有一个数据输入端口、一个时钟信号端口和八个输出端口。这种方法只需要2个MPU 的IO端口,而且在锁存器件这2个端口还可以干别的事情。74HC164驱动共阴、共阳数码管都很方便。驱动要点: 1、上升沿写入串行数据:CLK=0;DAT=num&0x01;CLK=1;2、写入数据的数码管编码(指代码中的 tab)串行数据是FIFO先进先出,也就是先写高位,移位放入。电路如图:3、程序源代码:1. /共阴数码管74H
7、C164串行驱动3. #include4. 5. #defineuintunsignedint7. #defineucharchar9. sbitDAT=P37;/模拟串口数据发送端11. sbitCLK=P34;/模拟时钟控制端15. ucharcodetab=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xff,0xf6;/0-9,-,全灭19. voidsendbyte(ucharbyte) 21. /num,c;num=tabbyte;for(c=0;c=1; 47. 49. 51. 52. 53. voiddelay_50ms(unsignedt) 55. 56. 57. unsignedj;59. for(;t0;t-) for(j=6245;jj-) 63. ;65. 66. 69. main() 71. 77. unsignedh;while(1) for(h=0;h10;h+) delay_50ms(1);sendbyte(h);87. 88. 89. delay_50ms(4);h=0;101.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1