[51单片机] 求一个共阳四位数码管滚动显示1234的程序

[复制链接]
3793|5
 楼主| 经历 发表于 2018-10-7 15:59 | 显示全部楼层 |阅读模式
求一个共阳四位数码管滚动显示1234的程序,用51单片机的,哪怕讲讲原理是怎么实现的也行
xuyaqi 发表于 2018-10-8 08:57 | 显示全部楼层
一步步来,先解决数码管可以显示1,2,3,4,再解决滚动显示,不知你第一步实现了没有。
zhuls 发表于 2018-10-8 11:37 | 显示全部楼层
1234
2341
3412
4123
是这样的吗?
dabing89 发表于 2018-10-11 16:00 | 显示全部楼层
  1. /*******************************************************************************
  2. * 文件名: 数码管
  3. * 描  述:
  4. * 功  能:数码管的使用
  5. * 作  者:大核桃
  6. * 版本号:1.0.1(2017.05.23)
  7. *******************************************************************************/
  8. #include "stc15w.h"//头文件
  9. #include "intrins.h"


  10. /*******************************************************************************
  11. * 文件名: 重定义
  12. * 描  述:   
  13. * 功  能:
  14. * 作  者:大核桃
  15. * 版本号:1.0.1(2017.05.23)
  16. *******************************************************************************/
  17. typedef unsigned char uint8;
  18. typedef unsigned int  uint16;
  19. typedef unsigned long uint32;

  20. /*******************************************************************************
  21. * 文件名:共阳数码管真值表
  22. * 描  述:
  23. * 功  能:
  24. * 作  者:大核桃
  25. * 版本号:1.0.1(2015.03.03)
  26. *******************************************************************************/
  27. code uint8 LedChar[] = {
  28.         0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  29.         0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
  30. };
  31. uint8 counter = 0;

  32. /*******************************************************************************
  33. * 文件名:单独位定义
  34. * 描  述:   
  35. * 功  能:
  36. * 作  者:大核桃
  37. * 版本号:1.0.1(2017.05.23)
  38. *******************************************************************************/
  39. sbit LED0 = P1^0;//第1组LED
  40. sbit LED1 = P1^1;//第2组LED
  41. sbit LED2 = P1^2;//第3组LED                                 
  42. sbit LED3 = P1^3;//第4组LED
  43. sbit LED4 = P1^4;//第5组LED
  44. sbit LED5 = P3^2;//第6组LED
  45. sbit LED6 = P0^0;//第7组LED
  46. sbit LED7 = P0^1;//第8组LED

  47. sbit LEDS1 = P3^3;//数码管1
  48. sbit LEDS2 = P3^4;//数码管2
  49. sbit LEDS3 = P3^6;//数码管3
  50. sbit LEDS4 = P3^7;//数码管4

  51. /*******************************************************************************
  52. * 文件名:函数前置声明
  53. * 描  述:   
  54. * 功  能:
  55. * 作  者:大核桃
  56. * 版本号:1.0.1(2017.05.23)
  57. *******************************************************************************/
  58. void Mcu_Port_Init();
  59. void LedScan();
  60. void Delay500ms(); //24MHZ
  61. void Time0_Init();//定时器0
  62. /*******************************************************************************
  63. * 文件名
  64. * 描  述: 主函数  
  65. * 功  能:入口
  66. * 作  者:大核桃
  67. * 版本号:1.0.1(2017.05.23)
  68. *******************************************************************************/
  69. void main(void)
  70. {
  71.         uint8 count = 0;

  72.         Mcu_Port_Init();//IO上电初始化
  73.         Time0_Init();
  74.         LED0 = 0;//第1组LED,如果使能请置为1
  75.         LED1 = 0;
  76.         LED2 = 0;
  77.         LED3 = 0;
  78.         LED4 = 0;
  79.         LED5 = 0;
  80.         LED6 = 0;
  81.         LED7 = 0;

  82.         while(1);
  83. }

  84. /*******************************************************************************
  85. * 文件名:void LedScan()
  86. * 描  述: LED刷新
  87. * 功  能:
  88. * 作  者:大核桃
  89. * 版本号:1.0.1(2017.05.23)
  90. *******************************************************************************/
  91. void LedScan()
  92. {
  93.         static uint8 i = 0;

  94.         P2 = 0Xff;
  95.         switch(i)
  96.         {
  97.                 case 0: LEDS4 = 0;LEDS1 = 1;P2 = LedChar[counter];i++;break;
  98.                 case 1: LEDS1 = 0;LEDS2 = 1;P2 = LedChar[counter];i++;break;
  99.                 case 2: LEDS2 = 0;LEDS3 = 1;P2 = LedChar[counter];i++;break;
  100.                 case 3: LEDS3 = 0;LEDS4 = 1;P2 = LedChar[counter];i = 0;break;

  101.                 default:break;
  102.         }
  103. }
  104. /*******************************************************************************
  105. * 文件名:void Time0_Init()
  106. * 描  述: 定时器0初始化
  107. * 功  能:1毫秒@11.0592MHz
  108. * 作  者:大核桃
  109. * 版本号:1.0.1(2017.05.23)
  110. *******************************************************************************/
  111. void Time0_Init(void)
  112. {
  113.         AUXR |= 0x80;        //定时器时钟1T模式
  114.         TMOD &= 0xF0;        //设置定时器模式
  115.         TL0 = 0xCD;                //设置定时初值
  116.         TH0 = 0xD4;                //设置定时初值
  117.         ET0 = 1;
  118.         TR0 = 1;                //定时器0开始计时
  119.         EA = 1;               
  120. }

  121. /*******************************************************************************
  122. * 文件名:
  123. * 描  述: 中断函数
  124. * 功  能:1毫秒@11.0592MHz
  125. * 作  者:大核桃
  126. * 版本号:1.0.1(2017.05.23)
  127. *******************************************************************************/
  128. void ET0_IRQHandler() interrupt 1
  129. {
  130.         static uint16 tmr500ms = 0;
  131.        
  132.         TL0 = 0xCD;                //设置定时初值
  133.         TH0 = 0xD4;                //设置定时初值

  134.         LedScan();
  135.         tmr500ms++;
  136.         if(tmr500ms == 500)
  137.         {
  138.                 tmr500ms = 0;
  139.                 //小灯间隔500ms亮灭
  140.                 counter++;
  141.                 if(counter > 9)
  142.                 {
  143.                         counter = 0;       
  144.                 }       
  145.         }               
  146. }

  147. /*******************************************************************************
  148. * 文件名:void Mcu_Port_Init()
  149. * 描  述: io初始化
  150. * 功  能:
  151. * 作  者:大核桃
  152. * 版本号:1.0.1(2017.05.23)
  153. *******************************************************************************/
  154. void Mcu_Port_Init()
  155. {
  156.         //将P0口低二位配置为推挽输出
  157.         //234567位配置位高阻输入
  158.         P0M1 = 0xFC;//1111 1100
  159.         P0M0 = 0X03;//0000 0011
  160.         //P0 = 0X01;//第6个
  161.         //P0 = 0X02;//第7个
  162.         //高3位配置高阻输入,用作模拟口
  163.         //其他配置推挽输出,驱动LED
  164.         P1M1 = 0xE0;//1110 0000
  165.         P1M0 = 0X1F;//0001 1111
  166.         //P2口配置准双向口
  167.         P2M1 = 0X00;
  168.         P2M0 = 0X00;
  169.         P2 = 0Xff; //上电为1111 1111

  170. //        //P54,P55口为推挽输出
  171.         P5M1 = 0X00;
  172.         P5M0 = 0X00;
  173.         P5 = 0xFF;

  174.         //P37,P36,3.2,P3.3 P3.4口为推挽输出
  175.         P3M1 = 0X00;
  176.         P3M0 = 0XFC;
  177.         P3 = 0X23; //0010 0111//第5个LED端口       
  178. }

  179. /*******************************************************************************
  180. * 文件名:void Delay500ms()                //@24.000MHz
  181. * 描  述:Y5内核延时
  182. * 功  能:
  183. * 作  者:大核桃
  184. * 版本号:1.0.1(2017.05.23)
  185. *******************************************************************************/
  186. void Delay500ms()                //@24.000MHz
  187. {
  188.         unsigned char i, j, k;

  189.         _nop_();
  190.         _nop_();
  191.         i = 46;
  192.         j = 153;
  193.         k = 245;
  194.         do
  195.         {
  196.                 do
  197.                 {
  198.                         while (--k);
  199.                 } while (--j);
  200.         } while (--i);
  201. }

  202. /*******************************************************************************
  203. * 文件名:void Delay500ms()                //@24.000MHz
  204. * 描  述:Y1内核延时
  205. * 功  能:
  206. * 作  者:大核桃
  207. * 版本号:1.0.1(2017.05.23)
  208. *******************************************************************************/
  209. //void Delay500ms()                //@24.000MHz
  210. //{
  211. //        unsigned char i, j, k;
  212. //
  213. //        _nop_();
  214. //        i = 8;
  215. //        j = 154;
  216. //        k = 122;
  217. //        do
  218. //        {
  219. //                do
  220. //                {
  221. //                        while (--k);
  222. //                } while (--j);
  223. //        } while (--i);
  224. //}



 楼主| 经历 发表于 2018-10-12 08:28 | 显示全部楼层
 楼主| 经历 发表于 2018-10-12 08:28 | 显示全部楼层
xuyaqi 发表于 2018-10-8 08:57
一步步来,先解决数码管可以显示1,2,3,4,再解决滚动显示,不知你第一步实现了没有。 ...

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

31

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部