找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1176|回复: 0
打印 上一主题 下一主题
收起左侧

7219驱动数码管显示时间和距离的单片机程序源码

[复制链接]
跳转到指定楼层
楼主
ID:353495 发表于 2018-7-17 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;      
  5. sbit pinDIN=P0^0;                        //?????????????
  6. sbit pinLOAD=P0^1;                        //?????????
  7. sbit pinCLK=P0^2;                        //????????
  8. #define uchar unsigned char
  9. uchar code LEDcode[]=
  10. {0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x00     /*0,1,2,3,4,5,6,7,8,9,???*/
  11. /* 0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x67,0x3e,0xff, */  };    /*A,B,C,D,E,F,P,U,???*/
  12. unsigned int motor1=0;
  13. unsigned int a=0;
  14. unsigned int b=0;
  15. u8 ssec,sec,min;
  16. void Timer0Init()
  17. {
  18. TMOD|=0X01;//?????????0???????????1??????TR0???????
  19. TH0=0Xd8; //?????????????????10ms
  20. TL0=0Xf0;
  21. ET0=1;//???????0?ж?????
  22. EA=1;//?????ж?
  23. TR0=1;//???????   
  24. }
  25. void Int0Init()
  26. {
  27. //????INT0
  28. IT0=1;//????????????????????
  29. EX0=1;//??INT0???ж??????
  30. EA=1;//?????ж?
  31. }
  32. /**************************************************
  33. *         ??MAX7219д??????8λ??????                      *
  34. ***************************************************/
  35. void sendbyte (uchar dat)
  36. {
  37.         uchar i,temp;
  38.         _nop_();
  39.         for (i=0;i<8;i++)
  40.    {
  41.        temp=dat&0x80;
  42.        dat=dat<<1;
  43.        if(temp)
  44.            pinDIN=1;
  45.        else
  46.            pinDIN=0;
  47.        pinCLK=0;
  48.        _nop_();
  49.        pinCLK=1;         
  50.    }
  51. }
  52. /**************************************************
  53. *        ??MAX7219д????????????16λ??                  *
  54. ***************************************************/
  55. void sendword (uchar addr,uchar dat)
  56. {
  57.         pinLOAD=0;
  58.         _nop_();
  59.         sendbyte (addr);
  60.         _nop_();
  61.         sendbyte (dat);
  62.         _nop_();
  63.         pinLOAD=1; //??16?????????????17???????????????pinCLK??????????????
  64. }
  65. /**************************************************
  66. *                MAX7219?????                                          *
  67. ***************************************************/
  68. void init7219 (void)
  69.    {
  70.             sendword (0x0c,0x01);     /*  ????????????      */   
  71.             sendword (0x0a,0x09);     /*   ????????  19/32      */  
  72.             sendword (0x0b,0x07);     /*  ??????????          */
  73.             sendword (0x09,0x00);     /*   ??????????         */
  74.                 sendword (0x0f,0x00);     /*??????? 00???????????*/
  75.    }
  76. /**************************************************
  77. *                MAX7219??????                                  *
  78. ***************************************************/
  79. void clear7219(void)
  80. {
  81.         uchar i;
  82.         for(i=8;i>0;i--)
  83.         {
  84.                 sendword(i,0x00);
  85.         }
  86. }
  87.    
  88. //??????
  89. void main(void)
  90. {

  91.    Timer0Init();
  92.    Int0Init();
  93.    init7219 ();
  94.    //clear7219();
  95.    while(1)     
  96.                 {
  97.             
  98.                         clear7219();  
  99.                         sendword(0x01,LEDcode[sec%10]);  
  100.                         sendword(0x02,LEDcode[sec/10]|0x80);  
  101.                         sendword(0x03,LEDcode[0]);  
  102.                         sendword(0x04,LEDcode[min%10]);  
  103.                         sendword(0x05,LEDcode[b%10]);  
  104.                         sendword(0x06,LEDcode[b/10]);  
  105.                         sendword(0x07,LEDcode[0]);  
  106.                         sendword(0x08,LEDcode[0]);
  107.                 }  


  108. }
  109. void Timer0() interrupt 1
  110. {
  111. TH0=0Xd8; //?????????????????10ms
  112. TL0=0Xf0;
  113. ssec++;
  114. if(ssec>=100)  //1s
  115. {
  116.   ssec=0;
  117.   sec++;
  118.   if(sec>=60)
  119.   {
  120.    sec=0;
  121.    min++;
  122.    if(min>=60)
  123.    {
  124.     min=0;
  125.    }
  126.   }
  127. }
  128. }
  129. void Int0() interrupt 0
  130. {
  131. motor1++;
  132. if(motor1==20)
  133. {
  134.   motor1=0;
  135.   a++;
  136.   b=a*6;
  137. }
  138.     if(b>=99)
  139. b=0;
  140. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表