找回密码
 立即注册

QQ登录

只需一步,快速开始

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

有大佬帮我再详细注解下这个程序吗还是有点没看懂

[复制链接]
跳转到指定楼层
楼主
ID:437648 发表于 2018-12-22 14:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar temp,aa,nn;
  6. sbit rn=P2^0;                                
  7. sbit nb=P2^1;
  8. sbit gn=P2^2;
  9. sbit rw=P2^3;
  10. sbit dx=P2^4;
  11. sbit gw=P2^5;
  12. sbit shi=P3^6;
  13. sbit ge=P3^7;                            /*对要使用的单片机各个口进行定义*/
  14. bit flag=0;

  15. uchar code table[]={
  16.     0x3f,0x06,0x5b,0x4f,
  17.     0x66,0x6d,0x7d,0x07,
  18.     0x7f,0x6f,0x77,0x7c,
  19.     0x39,0x5e,0x79,0x71};         /*将数字0123456789的16进制数定义成数组用以显示*/

  20. void delay(uint z);
  21. void disp(uint n);
  22. void nb_flash(void);
  23. void dx_flash(void);
  24. void  xint0();
  25. void timer0();
  26. void  LED_ON();
  27. void  xint1();
  28. void  LED_OFF();
  29. void nanbei();
  30. void dongxi();
  31.                 /*将所使用的子函数定义*/
  32. void main()
  33. {
  34.         uint num;
  35.         num=0;
  36.         aa=0;
  37.         TMOD=0x01;
  38.         TH0=(65536-50000)/256;
  39.         TL0=(65536-50000)%256;
  40.         EA=1;
  41.         ET0=1;
  42.         TR0=1;
  43.         EX0=1;
  44.         IT0=0;
  45.         EX1=1;
  46.         IT1=1;                       /*中断初始化*/
  47.         while(1)
  48.         {
  49.             nanbei();   
  50.             nb_flash();
  51.             dongxi();
  52.             dx_flash();                /*主函数中显示部分*/
  53.         }
  54. }
  55. void delay(uint z)                    /*延时子函数*/
  56. {
  57.         uint x,y;
  58.         for(x=z;x>0;x--)
  59.             for(y=110;y>0;y--);
  60. }
  61. void timer0() interrupt 1             /*定时器初始化*/
  62. {
  63.         TH0=(65536-50000)/256;
  64.         TL0=(65536-50000)%256;
  65.         aa++;
  66.         if(aa==18)
  67.         {
  68.             aa=0;
  69.             flag=1;
  70.         }   
  71. }
  72. void disp(uint n)                    /*显示子函数*/
  73. {
  74.       while(!flag)
  75.       {
  76.           ge=0;
  77.           P0=table[n%10];
  78.           delay(50);
  79.           shi=1;ge=1;
  80.           shi=0;
  81.           P0=table[n/10];
  82.           delay(50);
  83.           shi=1;ge=1;
  84.        }
  85.       if(flag==1)
  86.          flag=0;
  87. }
  88. void nanbei()                    /*南北方向的红绿灯和数码管显示子函数*/
  89. {        uint num;
  90.             num=60;
  91.             disp(num);
  92.             while(num<=60&&num>0)
  93.             {     num--;
  94.                  P2=0xde;
  95.                     disp(num);            
  96.             }
  97. }
  98. void dongxi()                     /*东西方向的红绿灯和数码管显示子函数*/
  99. {        uint num;            
  100.              num=60;
  101.             while(num<=60&&num>0)
  102.             {    P2=0xf3;      
  103.                 disp(num);
  104.                 num--;
  105.             }
  106. }
  107. void nb_flash(void)              /*南北方向的黄灯和数码管显示子函数*/
  108. {
  109.         uint a;
  110.         for(a=3;a>0;a--)
  111.         {    P2=0xdd;
  112.              nb=1;
  113.              delay(100);
  114.             nb=0;
  115.             disp(a);
  116.         }
  117. }
  118. void dx_flash(void)                /*东西方向的黄灯和数码管显示子函数*/
  119. {
  120.         uint a;
  121.         for(a=3;a>0;a--)
  122.         {     P2=0xeb;
  123.              dx=1;
  124.              delay(100);
  125.              dx=0;
  126.              disp(a);
  127.         }
  128. }
  129. void  xint0()  interrupt 2                     /*中断定义*/
  130. {   
  131.     TH0=(65536-50000)/256;
  132.     TL0=(65536-50000)%256;   
  133.      LED_ON();   
  134. }
  135. void  LED_ON()                       /*开关控制灯的子函数*/   
  136. {            uint b;
  137.             rn=0;
  138.             rw=0;
  139.             gn=1;
  140.             gw=1;
  141.             nb=1;
  142.             dx=1;
  143.             for(b=5;b>0;b--)
  144.             {
  145.             ge=0;shi=1;
  146.             P0=table[b];
  147.             delay(1000);
  148.             ge=1; shi=1;
  149.             }            
  150.             return;
  151. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:21069 发表于 2018-12-22 17:33 | 只看该作者
void delay(uint z);
void disp(uint n);
void nb_flash(void);
void dx_flash(void);
void  xint0();
void timer0();
void  LED_ON();
void  xint1();
void  LED_OFF();
void nanbei();
void dongxi();这些函数多数别人都有拼音标注了,sbit rn=P2^0;                                
sbit nb=P2^1;
sbit gn=P2^2;
sbit rw=P2^3;
sbit dx=P2^4;
sbit gw=P2^5;
sbit shi=P3^6;
sbit ge=P3^7;                            /*对要使用的单片机各个口进行定义*/
bit flag=0;这些如果你不喜欢别人的定义名你可以自己整成你喜欢的,这样整他一下,就不信你还要别人帮你注解
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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