找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个单片机程序为什么用ET0=1才可以运行,明明改成模式3了

[复制链接]
跳转到指定楼层
楼主
ID:462833 发表于 2019-1-6 01:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. unsigned long num=0,tt=0;
  6. uchar j,k;
  7. sbit shuru=P1^0;
  8. sbit shuchu=P1^1;
  9. uchar a0,b0,c0,d0,e0,f0;
  10. sbit dula=P2^6;
  11. sbit wela=P2^7;
  12. sbit beep=P2^3;

  13. unsigned char pwm_left_val = 0;//
  14. unsigned char pwm_t;//周期

  15. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  16.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

  17. int flag=0;


  18. void delay(uchar i)
  19. {
  20.         for(j=i;j>0;j--)
  21.         for(k=125;k>0;k--);
  22. }

  23. void displayw(uint a,uint b,uint c,uint d,uint e,uint f)
  24. {
  25.    dula=0;
  26.    P0=table[a];
  27.    dula=1;
  28.    dula=0;
  29.    
  30.    wela=0;
  31.    P0=0xfe;
  32.    wela=1;
  33.    wela=0;
  34.    delay(5);
  35.    
  36.    P0=table[b];
  37.    dula=1;
  38.    dula=0;
  39.    
  40.    P0=0xfd;
  41.    wela=1;
  42.    wela=0;
  43.    delay(5);

  44.    P0=table[c];
  45.    dula=1;
  46.    dula=0;
  47.    
  48.    P0=0xfb;
  49.    wela=1;

  50.    wela=0;
  51.    delay(5);
  52.    
  53.    P0=table[d];
  54.    dula=1;
  55.    dula=0;
  56.    
  57.    P0=0xf7;
  58.    wela=1;
  59.    wela=0;
  60.    delay(5);
  61.    
  62.    P0=table[e];
  63.    dula=1;
  64.    dula=0;
  65.    
  66.    P0=0xef;
  67.    wela=1;
  68.    wela=0;
  69.    delay(5);
  70.    
  71.    P0=table[f];
  72.    dula=1;
  73.    dula=0;
  74.    
  75.    P0=0xdf;
  76.    wela=1;
  77.    wela=0;
  78.    delay(5);
  79. }

  80. void display0(num)
  81. {
  82.                 if(num<10)
  83.         {
  84.                 a0=num;b0=16;c0=16;d0=16;e0=16;f0=16;
  85.         }
  86.         else
  87.         {
  88.                 if(num<100)
  89.                 {a0=num/10;b0=num%10;c0=16;d0=16;e0=16;f0=16;}
  90.                 else
  91.                 {
  92.                         if(num<1000)
  93.                         {a0=num/100;b0=num%100/10;c0=num%10;d0=16;e0=16;f0=16;}
  94.                         else
  95.                         {
  96.                                 if(num<10000)
  97.                                 {a0=num/1000;b0=num%1000/100;c0=num%100/10;d0=num%10;e0=16;f0=16;}
  98.                                 else
  99.                                 {
  100.                                         if(num<100000)
  101.                                         {a0=num/10000;b0=num%10000/1000;c0=num%1000/100;d0=num%100/10;e0=num%10;f0=16;}
  102.                                         else
  103.                                         {
  104.                                                 if(num<1000000)
  105.                                                 {a0=num/100000;b0=num%100000/10000;c0=num%10000/1000;d0=num%1000/100;e0=num%100/10;f0=num%10;}
  106.                                        
  107.                                         }
  108.                                 }
  109.                         }
  110.                 }
  111.         }
  112.         displayw(a0,b0,c0,d0,e0,f0);
  113. }

  114. void main()
  115. {        

  116.         TMOD=0x51;
  117.         TR0=1;
  118.         TR1=1;         
  119.         TH1=0x4c;// 5*10^-2s
  120.         TL1=0x00;
  121.         ET0=1;
  122.         ET1=1;
  123.         EA=1;
  124.            while(1)
  125.         {
  126.                 display0(num/2);                        
  127.                 if(TL1==1)           
  128.                 {                           
  129.                         shuchu=~shuchu;        
  130.                         num++;                        
  131.                         TL1=0;
  132.                 }
  133.                 if (flag==1)
  134.                 {
  135.                         
  136.                         if ((num/2)<10)
  137.                         {
  138.                                 beep=0;
  139.                                 delay(8);
  140.                                 beep=1;
  141.                                 delay(2);
  142.                         }
  143.                         
  144.                         if ((num/2)>40)
  145.                         {
  146.                                 beep=0;
  147.                                 delay(20);
  148.                                 display0(num/2);
  149.                                 delay(20);
  150.                                 beep=1;

  151.                         }

  152.                 }                                                   
  153.         }
  154. }
  155. /*void timer0() interrupt 1
  156. {
  157.         pwm_t++;
  158.         if(pwm_t == 200)
  159.                 pwm_t = P1 = 0;
  160.         if(pwm_left_val == pwm_t)
  161.                         P1 = 0XFF;                                         
  162. }                                    */
  163. void time0() interrupt 3
  164. {        
  165.         TH1=0x4c;
  166.         TL1=0x00;

  167.         tt++;
  168.            shuru=~shuru; //定时器每隔50ms发起一次中断,shuru电平变换一次,故模拟输入方波的周期为100ms
  169.         if(tt==200)
  170.         {
  171.          EA=0;
  172.          flag=1;
  173.         }
  174. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2019-1-6 08:09 | 只看该作者
你设置TMOD=0x51;也就是T0工作方式1,T1工作方式1并用作计数器(从T1/P3.5脚输入),哪里“明明改成模式3了”?
回复

使用道具 举报

板凳
ID:462833 发表于 2019-1-6 11:11 | 只看该作者
wulin 发表于 2019-1-6 08:09
你设置TMOD=0x51;也就是T0工作方式1,T1工作方式1并用作计数器(从T1/P3.5脚输入),哪里“明明改成模式3了” ...

恍然大悟,谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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