找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1415|回复: 2
收起左侧

单片机LED旋转显示屏的程序,有些地方不理解 求解释

[复制链接]
ID:718877 发表于 2020-5-22 21:14 | 显示全部楼层 |阅读模式
下面是LED旋转显示屏的程序,有些地方不理解。哪位能帮我解释一下,zhushi,不用全部,主要是从定时器0中断部分

单片机源程序如下:
  1. #include "reg51.h"
  2. #include "DS1302.H"
  3. #include "hongwai.H"
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. uchar xdata ShowDat[176];
  7. uint ShowNum;
  8. uchar nian,yue,ri,shi,fen,miao;
  9. uchar ms,ziNum,NB;
  10. uchar i;
  11. bit QuanOK;  //bit一般作为程序判断的标志位
  12. uchar flagset=0;
  13. uchar Tim_red_tab[6]={0};        //记录年月日时分秒和系统状态信息
  14. uchar send_ok=0;
  15. uchar code Zimo[][16];
  16. uchar code Zimo1[][16];
  17. uchar code Zimo2[][16];
  18. uchar code Zimo3[][16];


  19. void delayms(uint xms) //延时1ms
  20. {
  21.         uchar k;
  22.         while(xms--)
  23.         {for(k=0;k<125;k++);}
  24. }


  25. void InterConfig(void)
  26. {
  27.         TMOD|=0x01;        //TMOD|=0x01等价于TMOD=TMOD|0x01;设置定时器0的工作方式,且保证其他位不变
  28.         TH0=0xfe;   
  29.         TL0=0x0b;
  30.         ET0=1;   //打开定时器0的中断
  31.         TR0=1;   //定时器0工作
  32.         EX0=1;   //允许外部中断         
  33.         IT0=1;    //外部中断的方式为 下降沿触发
  34.         EA=1;    //中断总开关
  35. }

  36. void main()
  37. {
  38.         InterConfig();//中断、定时器设置
  39.         for(i=0;i<176;i++) //显示数据缓存清空
  40.         {
  41.                 ShowDat[i]=0xff;        //设为高电平
  42.         }
  43.          
  44.   TIM1init();//定时器1 红外使用
  45.   EX1init();// 外部中断1 红外使用
  46.         delayms(1000);

  47.         while(1)
  48.         {
  49.                         
  50.                   delayms(100);
  51.                  if(irok==1) //红外接收完成
  52.                  {
  53.                          Ircordpro();
  54.                          irok=0;
  55.                  }
  56.                  if(irpro_ok==1) //红外解析完成
  57.                  {
  58.                          irpro_ok=0;
  59.                         
  60.                      if(IRcord[2]==0x0c)//键1
  61.                          {
  62.                                 IRcord[2]=0;
  63.                                  for(i=0;i<176;i++)
  64.                                                 {
  65.                                                         ShowDat[i]=0xff;        
  66.                                                 }
  67.                                          ShowNum=0; ms=0; QuanOK=0; ziNum=0;
  68.                                          flagset=1;

  69.                          }               
  70.                 }

  71.         }
  72. }
  73.   
  74. void EX0_int() interrupt 0         //外部中断0
  75. {
  76.         ShowNum=0;
  77.         ms++;  
  78.                
  79. }

  80. void timer0() interrupt 1        //定时中断0 中断处理
  81. {
  82.         TH0=0xfe;  //0.37ms     11.0592M 晶振
  83.         TL0=0xab;                        

  84. if(flagset==1)        
  85. {                if(ShowNum<80)      
  86.         {
  87.                 P1=ShowDat[ShowNum*2];    //送数据低位显示
  88.                 P0=ShowDat[ShowNum*2+1];               
  89.                 ShowDat[ShowNum*2]=ShowDat[ShowNum*2+2];
  90.                 ShowDat[ShowNum*2+1]=ShowDat[ShowNum*2+3];
  91.                 ShowNum++;
  92.                 QuanOK=1;
  93.         }
  94.         else  
  95.         {
  96.                 P1=P0=0xff;
  97.                 if(ms==8)  
  98.                 {
  99.                         ms=0;
  100.                         QuanOK=0;
  101.                         
  102.                         for(i=0;i<16;i++)
  103.                         {
  104.                                 ShowDat[160+i]=Zimo1[ziNum][i];        
  105.                         }
  106.                         ziNum=(ziNum+1)%61;         //重复
  107.                 }
  108.                
  109.                 else
  110.                 {
  111.                         if(QuanOK==1&&ms!=0) // 如果全部数据发送完毕   则更新160---176 数据
  112.                         {
  113.                                 QuanOK=0;
  114.                                 for(i=0;i<7;i++)
  115.                                 {
  116.                                         ShowDat[(80+i)*2]=ShowDat[(80+i)*2+2];
  117.                                         ShowDat[(80+i)*2+1]=ShowDat[(80+i)*2+3];        
  118.                                 }
  119.                         }
  120.                 }
  121.         }
  122. }

  123. uchar code Zimo1[][16]=
  124. {

  125. 0xEF,0xFF,0xF3,0xFF,0xBB,0xC0,0xDB,0xFE,0xEB,0xFE,0xFB,0xFE,0xFA,0xFE,0x39,0x00,
  126. 0xFB,0xFE,0xFB,0xFE,0xEB,0xEE,0xDB,0xDE,0xBB,0xE0,0xEB,0xFF,0xF3,0xFF,0xFF,0xFF,/*"帘",0*/

  127. 0xFF,0x7E,0x3F,0xBF,0xCF,0xDE,0xE0,0xED,0xEF,0xF3,0xEF,0xFC,0x0F,0xFF,0xFF,0xFF,
  128. 0xFF,0xFF,0x00,0x00,0xDF,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,/*"外",1*/

  129. 0xBF,0xFF,0xBD,0xFF,0x33,0x80,0xFF,0xDF,0xBF,0xEF,0xDF,0xFF,0x07,0x00,0xB0,0xDD,
  130. 0xB7,0xDD,0xB6,0xDD,0x01,0xC0,0xB7,0xDD,0xB7,0xDD,0xB7,0xDD,0xF7,0xDF,0xFF,0xFF,/*"谁",2*/

  131. 0xFF,0xDE,0xF7,0xDE,0xF7,0xEE,0xD7,0xEE,0x37,0xF6,0xF7,0xFA,0xF7,0xFC,0x00,0x00,
  132. 0xF7,0xFC,0xF7,0xFA,0x77,0xF6,0x97,0xEE,0xF7,0xEE,0xF7,0xDE,0xFF,0xDE,0xFF,0xFF,/*"来",3*/

  133. 0xEF,0xFB,0xEF,0xBB,0xEF,0x7D,0x00,0x80,0xEF,0xFE,0xAF,0xFF,0xDF,0xFF,0x07,0x00,
  134. 0xB0,0xDD,0xB7,0xDD,0xB6,0xDD,0x05,0xC0,0xB7,0xDD,0xB7,0xDD,0xF7,0xDF,0xFF,0xFF,/*"推",4*/

  135. 0xDF,0xDD,0xCF,0x98,0x53,0xDD,0x9C,0xED,0xCF,0x6D,0x6F,0xBF,0xAD,0xCE,0xCD,0xF0,
  136. 0xED,0xFE,0x01,0xF6,0xEE,0xB2,0xCE,0x74,0xAE,0xB7,0x6F,0xC7,0x7F,0xFF,0xFF,0xFF,/*"绣",5*/

  137. 0xFF,0xFF,0xFF,0x7F,0xFF,0x9F,0x07,0xE0,0xF7,0xFE,0xF7,0xFE,0xF6,0xFE,0xF1,0xFE,
  138. 0xF7,0xFE,0xF7,0xFE,0xF7,0xFE,0xF7,0xFE,0x07,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"户",6*/

  139. 0xFF,0xFF,0xFF,0xFF,0xFF,0xA7,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  140. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*",",7*/

  141. 0xEF,0xFB,0xEF,0xFC,0x2F,0xFF,0x00,0x00,0x6F,0xFF,0xEF,0xBE,0xFB,0xBF,0xFB,0xBE,
  142. 0xFB,0xBE,0xFB,0xBE,0x03,0x80,0xFB,0xBE,0xFB,0xBE,0xFB,0xBE,0xFB,0xBF,0xFF,0xFF,/*"枉",8*/

  143. 0xDF,0xFB,0x5B,0xF5,0x5B,0xB6,0x5B,0x77,0x00,0x81,0x5B,0xFA,0x4B,0xFB,0xD7,0x7B,
  144. 0x7B,0xBF,0x8F,0xDF,0x70,0xEC,0xF7,0xF3,0xF7,0xCC,0x07,0xBF,0xF7,0x7F,0xFF,0xFF,/*"教",9*/

  145. 0xFF,0x7F,0xFF,0xBF,0xFF,0xDF,0xFF,0xEF,0xFF,0xF3,0xFF,0xFC,0x3F,0xFF,0xC0,0xFF,
  146. 0x3F,0xFF,0xFF,0xFC,0xFF,0xF3,0xFF,0xEF,0xFF,0xDF,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,/*"人",10*/

  147. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xF7,0xFF,0xE7,0xFF,0xCF,0xFF,0xFF,0xFF,0xFF,
  148. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"、",11*/

  149. 0xBF,0xFF,0xBB,0x7F,0xDB,0x77,0xEB,0x7B,0x80,0xBD,0x6B,0xBA,0xDB,0xD6,0xFF,0xEE,
  150. 0xDB,0xEE,0xEB,0xF6,0x80,0xFA,0xEB,0xFC,0xDB,0xFF,0xBB,0xFF,0xBF,0xFF,0xFF,0xFF,/*"梦",12*/

  151. 0xFF,0xFF,0x03,0xC0,0xDF,0xDD,0xDB,0xDE,0x57,0xDF,0x00,0xD0,0x57,0xDF,0xDB,0x5C,
  152. 0xFF,0x9F,0x03,0xE0,0xBB,0xFF,0xBB,0xFF,0x3B,0x00,0xBD,0xFF,0xBF,0xFF,0xFF,0xFF,/*"断",13*/

  153. 0xBB,0xEF,0xBB,0xCF,0x03,0xE0,0xBB,0xF7,0xBB,0xF7,0xFF,0xFF,0x6B,0xFD,0x9B,0x85,
  154. 0xBB,0xBD,0xAB,0xBD,0x1D,0x80,0xBD,0xBD,0x9C,0xBD,0xA5,0x05,0xFF,0xFD,0xFF,0xFF,/*"瑶",14*/

  155. 0xFF,0xFF,0xBF,0xFF,0x1F,0xFF,0xAF,0x01,0xB7,0xBD,0xBB,0xBD,0xBC,0xBD,0xBF,0xBD,
  156. 0xBF,0xBD,0xBF,0xBD,0xB7,0xBD,0xAF,0x01,0x9F,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,/*"台",15*/

  157. 0xFF,0xFF,0x0F,0x00,0xEF,0xBD,0xEF,0xBD,0xEF,0xBD,0x00,0x80,0xEF,0xBD,0xEF,0xBD,
  158. 0xEF,0xBD,0x00,0x80,0xEF,0xBD,0xEF,0xBD,0xEF,0xBD,0x0F,0x00,0xFF,0xFF,0xFF,0xFF,/*"曲",16*/

  159. 0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,0xDB,0xFF,0xDB,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,
  160. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"。",17*/

  161. 0x7F,0xEF,0x77,0xC7,0x77,0xEB,0x77,0xEC,0x00,0xEF,0x77,0xEB,0x77,0xE7,0x77,0xCF,
  162. 0x7F,0xFF,0x03,0x00,0xFB,0xFF,0xFB,0xF7,0xFB,0xEF,0x03,0xF0,0xFF,0xFF,0xFF,0xFF,/*"却",18*/

  163. 0xFF,0x7F,0xFF,0x7F,0xFD,0xBF,0xE1,0xBF,0x9D,0xDF,0x7D,0xEE,0xFD,0xF5,0xFD,0xFB,
  164. 0xFD,0xF5,0x7D,0xEE,0x8D,0xDF,0xF1,0xBF,0xFF,0xBF,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,/*"又",19*/

  165. 0xFF,0x7E,0xFF,0xBE,0xFF,0xDE,0x80,0xE2,0xB6,0xDE,0xB6,0xBE,0xB6,0x7E,0xB6,0x00,
  166. 0xB6,0x76,0xB6,0x76,0xB6,0x76,0x80,0x76,0xFF,0x76,0xFF,0x7E,0xFF,0x7E,0xFF,0xFF,/*"是",20*/

  167. 0xFF,0xFF,0xFF,0xFF,0xFF,0xA7,0xFF,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  168. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*",",21*/
  169. 0xFF,0x7F,0xFF,0x9F,0x01,0xE0,0xFD,0xFF,0xED,0xDF,0xDD,0xEF,0x3D,0xF3,0xFD,0xFC,
  170. 0x3D,0xF3,0xCD,0xCF,0xFD,0xFF,0x01,0xF0,0xFF,0xCF,0xFF,0xBF,0xFF,0x07,0xFF,0xFF,/*"风",22*/
  171. 0xFB,0x00,0x8B,0xFE,0xAB,0xE2,0xAA,0xEA,0xA9,0xEA,0xAB,0xA2,0x8B,0x7E,0xFB,0x80,
  172. 0xBF,0x7F,0x3F,0xBC,0xBF,0xD3,0x80,0xEF,0xB7,0xD3,0x37,0xBC,0xF7,0x7F,0xFF,0xFF,/*"敲",23*/

  173. 0x7F,0xFF,0xBF,0xFF,0xCF,0xFF,0xE0,0xFF,0x0F,0x00,0xEF,0xFF,0x6F,0xFF,0xBF,0xFF,
  174. 0xCF,0xFF,0xE0,0xBF,0xEF,0x7F,0x0F,0x80,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF,0xFF,0xFF,/*"竹",24*/

  175. 0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xFF,0xDB,0xFF,0xDB,0xFF,0xE7,0xFF,0xFF,0xFF,0xFF,
  176. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"。",25*/

  177. 0xFF,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,
  178. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,/*"—",26*/

  179. 0xFF,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,
  180. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,/*"—",27*/

  181. 0xFB,0xFF,0xBB,0xEF,0xBB,0x71,0xBB,0xBF,0xA0,0xDF,0xBB,0xE7,0x0B,0xF8,0xBB,0xFF,
  182. 0xBB,0xBF,0xBB,0x7F,0xA0,0xBF,0x3B,0xC0,0xFB,0xFF,0xFB,0xFE,0xFB,0xF1,0xFF,0xFF,/*"苏",28*/

  183. 0x37,0xF7,0x47,0xE7,0x70,0xF7,0x17,0x00,0x77,0xFB,0x77,0xFB,0xFF,0xDF,0x6F,0xDF,
  184. 0x6F,0xC0,0x6F,0xEF,0xEF,0xEF,0x00,0xF8,0xEF,0xC7,0xED,0xBF,0xEB,0x0F,0xFF,0xFF,/*"轼",29*/

  185. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",22*/         //61行

  186. };

复制代码

回复

使用道具 举报

ID:584814 发表于 2020-5-23 09:24 | 显示全部楼层
定时器0中断部分已包含注释看不清可以靠近点
回复

使用道具 举报

ID:718877 发表于 2020-5-23 10:04 | 显示全部楼层
man1234567 发表于 2020-5-23 09:24
定时器0中断部分已包含注释看不清可以靠近点

我是不理解那部分的工作流程,也就是从if(shownum<80)这里开
ShowDat[ShowNum*2]=ShowDat[ShowNum*2+2];
ShowDat[ShowNum*2+1]=ShowDat[ShowNum*2+3];  这两句是让文字滚动起来的意思吗?也就是往前一列?,还还有后面的呢,是什么?更新数据?啥意思呀。
ShowDat[(80+i)*2]=ShowDat[(80+i)*2+2];
ShowDat[(80+i)*2+1]=ShowDat[(80+i)*2+3];
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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