数码之家

 找回密码
 立即注册
搜索
查看: 2524|回复: 1

[C51] 用N76E003驱动TM1722示例

[复制链接]
发表于 2021-3-9 18:39:27 | 显示全部楼层 |阅读模式
  1. #include <n76e003.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. #define SET_BIT0        0x01
  5. #define SET_BIT1        0x02
  6. #define SET_BIT2        0x04
  7. sbit CLK = P1^1  ;        //时钟
  8. sbit CS  = P1^2  ;        //片选
  9. sbit DIN = P1^0  ;        //数据
  10. sbit BT  = P0^1  ;        //按键
  11. sbit BT1 = P0^0  ;        //复位按键
  12. uchar shuju,shu0,shu1,shu1,shu2,shu3,shu4;
  13. uchar code table[]={0x7d,0x60,0x3e,0x7a,
  14. 0x63,0x5B,0x5f,0x70,0x7f,0x7B,0x77,0x4f,
  15. 0xB8,0x76,0xF8,0xE8,0x6D,0x40,0x10,0x00,0xff};
  16. uchar code table1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//测试用,可忽略
  17. uchar code table2[]={0xf9,0x60,0xd6,0xf4,0x6c,0xbc,0xbe,0xe0,0xfe,0xfc};//正常情况下0-9显示
  18. uchar code table3[]={0x5f,0x06,0x6b,0x2f,0x36,0x3d,0x7d,0x07,0x7f,0x3f};//AIP1722取反0-9显示
  19. void Delay_xms(uint x)                     
  20. {
  21.                 uint i,j;
  22.                 for(i=x;i>0;i--)
  23.                         for(j=110;j>0;j--);
  24. }
  25. void Write_1722_byte(uchar DATA) //写字节
  26. {
  27.                 uchar i;
  28.                 CS=0;               
  29.                 for(i=8;i>=1;i--)
  30.      {                  
  31.        CLK  = 0;                                                     //时钟拉低,写数据
  32.        DIN  = DATA & 0x01;             //DATA & 10000000,读取最高位写入max7219,最先发送高位(从左往右D7-D0)      
  33.        CLK  = 1;                                                     //时钟拉高,送数据
  34.                          DATA = DATA >> 1;                     //左移1位,重新&运算,读取最高位写入max7219,从右往左写
  35.      }                                 
  36. }
  37. void Write_1722_com(uchar com)   //写指令
  38. {
  39.         CS=0;
  40.         Write_1722_byte(com);
  41.   CS=1;       
  42. }       
  43. void timer0() interrupt 1  
  44. {
  45.         TH0=(65536-50000)/256;
  46.         TL0=(65536-50000)%256;
  47.         if(BT!=1)                //按键
  48.         {
  49.                 shuju++;
  50.                 while(!BT);           //等待按键释放
  51.                 if(shuju==1)          //1秒
  52.                 {
  53.                         shuju=0;
  54.                         shu0++;              //计数
  55.                         if(shu0==10)         
  56.                         {
  57.                                 shu0=0;
  58.                                 shu1++;
  59.                                 if(shu1==10)
  60.                                 {
  61.                                         shu1=0;
  62.                                         shu2++;
  63.                                         if(shu2==10)
  64.                                         {
  65.                                                 shu2=0;
  66.                                                 shu3++;
  67.                                                 if(shu3==10)
  68.                                                 {
  69.                                                         shu3=0;
  70.                                                         shu4++;
  71.                                                         if(shu4==10)
  72.                                                         {
  73.                                                                 shu4=0;
  74.                                                         }
  75.                                                 }
  76.                                         }
  77.                                 }
  78.                         }
  79.                 }
  80.         }
  81.         if(BT1!=1)
  82.         {
  83.                 shu0=0;
  84.                 shu1=0;
  85.                 shu2=0;
  86.                 shu3=0;
  87.                 shu4=0;
  88.         }
  89. }
  90. void TM1722_Write_Word(uchar addr,uchar dat)  //写数据
  91. {   
  92.   Write_1722_byte(addr);
  93.         Write_1722_byte(dat);
  94.   Delay_xms(10);           
  95.   CS=1;   
  96. }
  97. void Init_1722(void)                                                                                         
  98. {
  99.   TMOD=0x01;                  
  100.         TH0=(65536-50000)/256;      
  101.         TL0=(65536-50000)%256;
  102.         EA=1;                       
  103.         ET0=1;                     
  104.         TR0=1;
  105.         P1M1&=~SET_BIT0;P1M2|=~SET_BIT0;  //P1.0准双向
  106.         P1M1&=~SET_BIT1;P1M2|=~SET_BIT1;  //P1.1准双向
  107.   P1M1&=~SET_BIT2;P1M2|=~SET_BIT2;  //P1.2准双向
  108.         P0M1&=~SET_BIT1;P0M2|=~SET_BIT1;  //P0.1准双向
  109.         P0M1&=~SET_BIT0;P0M2|=~SET_BIT0;  //P0.0准双向
  110.         Write_1722_com(0x00);
  111.         Write_1722_com(0x40);
  112.         Write_1722_com(0xc0);
  113.         Write_1722_com(0x97);          //亮度
  114. }
  115. void Init_qingping()             //清屏程序
  116. {
  117.         TM1722_Write_Word(0xc2,0x00);       
  118.         TM1722_Write_Word(0xc3,0x00);
  119.         TM1722_Write_Word(0xc6,0x00);
  120.         TM1722_Write_Word(0xc7,0x00);
  121.         TM1722_Write_Word(0xca,0x00);
  122.         TM1722_Write_Word(0xcb,0x00);
  123.         TM1722_Write_Word(0xce,0x00);
  124.         TM1722_Write_Word(0xcf,0x00);
  125. }
  126. void main(void)
  127. {       
  128.         Init_1722();
  129.         Init_qingping();               //清屏程序
  130.         Delay_xms(5);
  131.   while(1)
  132.         {  
  133.                 TM1722_Write_Word(0xc3,table3[shu4]);
  134.                 TM1722_Write_Word(0xcf,table3[shu3]);
  135.                 TM1722_Write_Word(0xce,table3[shu2]);
  136.                 TM1722_Write_Word(0xcb,table3[shu1]);
  137.                 TM1722_Write_Word(0xc7,table3[shu0]);
  138.         };       
  139. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +50 收起 理由
家睦 + 50

查看全部打赏

 楼主| 发表于 2021-3-9 18:40:28 | 显示全部楼层
TM1722与AIP1722可以互相替换,区别就是价格:cool::cool:
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-21 00:27 , Processed in 0.436801 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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