• 跑秒程序理解


      1 /*2018年7月29日 17点40 于福安公寓
      2 对于通过定时器定时来显示时间,就要通过向显示函数中传入要显示的参数,
      3 这个参数可以通过在中断函数中或者显示主函数中,通过
      4 shi=num/10;  ge =num%10;来进行分离参数,然后件分析后的参数在传递到显示函数中
      5 既可以显示
      6 */
      7 #include<reg52.h>
      8 #define uchar unsigned char
      9 #define uint   unsigned int  
     10 sbit LA =P2^2;
     11 sbit LB =P2^3;
     12 sbit LC =P2^4;
     13 sbit led=P2^0;
     14 //sbit k1 =P3^1;
     15 sbit key1 =P3^1;
     16 
     17 void delay(uint);
     18 uchar tt =0,num ,ge;
     19 void display(uchar);
     20 void scanf();
     21 uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
     22                     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
     23 
     24 
     25 /*void keypros()
     26 {
     27     if(k1==0)          //检测按键K1是否按下
     28     {    
     29         delay(1);   //消除抖动 一般大约10ms
     30         if(k1==0)     //再次判断按键是否按下
     31         {
     32             led=~led;      //led状态取反
     33             TR0 =0;
     34 
     35             LA =1;
     36             LB =0;
     37             LC =0;
     38             P0 =0x3f;
     39         }
     40         while(!k1);//只有当按键释放之后,才会执行后面的TR0=1;这样才会使得定时器0继续使用
     41         TR0 =1;
     42     }        
     43 }
     44 */
     45 void scanf()
     46 {
     47     
     48     if(key1==0)
     49     {
     50         delay(1);
     51         if(key1 ==0)
     52         {
     53             TR0 =0;
     54             led =1;
     55             LA =1;
     56             LB =0;
     57             LC =0;
     58             P0 =0x3f;
     59             while(!key1);
     60             
     61                 TR0 =1;    //切记:这个TR0必须要放在while(!key);这个循环的外面,不然会造成延时        
     62              
     63 
     64         }
     65 
     66     }
     67 }
     68   
     69 
     70 void main()
     71 {
     72     
     73     EA =1;
     74     TMOD =0x01;
     75     TH0 =(65536-50000)/256;
     76     TL0 =(65536-50000)%256;
     77     ET0 =1;
     78     TR0 =1;
     79     while(1)
     80     {
     81         
     82          if(tt==20)   //此处必须==,不然会出错,相当于把2付给了tt,这个循环将退不出去
     83         {
     84           tt =0;
     85           num++;
     86           if(num==10)
     87           num =0;
     88           ge =num%10;
     89           led =0;
     90           scanf();
     91           display(ge);      
     92           
     93 //          display();
     94         }        
     95     }
     96 }
     97 
     98 
     99 void display(uchar ge )
    100 {
    101     LA =0;
    102     LB =0;
    103     LC =0;
    104     P0 =table[ge];
    105                          /*如果没有这个延时程序的,那么数码管就会出现一个8并且永远不会变,
    106                          也就是现实太快了,肉眼看不清楚,当时间太长的,但是定时器的时间优先,
    107                         故而每次还没有显示完时,就会有下一次中段到来    */          
    108 } 
    109 
    110 void delay(uint x)
    111 {
    112     uint i,j;
    113     for(i =x;i>0;i--)
    114         for(j=110;j>0;j--);
    115 }
    116 
    117 void  PaoMiaoT() interrupt 1
    118 {
    119     TH0 =(65536-50000)/256;
    120     TL0 =(65536-50000)%256;
    121     tt++;
    122 }    
    View Code
  • 相关阅读:
    [solution]xdebug正确配置,但不显示错误信息
    SIGCHLD信号
    sigsuspend
    信号引起的竞态
    智力面试题
    可重入和不可重入
    信号—信号处理函数(捕捉)
    PCB信号集
    信号产生的原因:
    信号初步
  • 原文地址:https://www.cnblogs.com/wises/p/9539567.html
Copyright © 2020-2023  润新知