欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機電子時鐘程序 顯示函數部分看不懂 [打印本頁]

作者: zt666    時間: 2023-6-5 17:52
標題: 單片機電子時鐘程序 顯示函數部分看不懂
  1.     #include <reg51.h>
  2.     #define uchar unsigned char
  3.     #define uint unsigned int
  4.     uchar code Dsy_Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5.     sbit Key_Start = P2^2;
  6.     sbit Key_Power=P2^3;
  7.     sbit dp = P0^7;                                                                                                       //小數點
  8.     uchar num=0;  //定時器的計數
  9.     uchar count=0;//數碼管的計數
  10.     uchar Key_Num=0;//按鍵次數的計數
  11.     uchar Power_Num=0;
  12.     bit Key_State=1,Power_State=1;
  13.     void DelayMS(uint x){
  14.             uchar i;
  15.             while(x--)
  16.                     for(i=0;i<120;i++);
  17.     }
  18.     void Dsy(){  //顯示函數
  19.             P2=0xfd;
  20.             P0=Dsy_Code[num%10];
  21.             DelayMS(2);
  22.             P2=0xfe;
  23.             P0=Dsy_Code[num/10];
  24.             dp=1;
  25.             DelayMS(2);
  26.     }
  27.     void Timer()interrupt 1{  //定時器
  28.             TH0=(65536-50000)/256;  //50ms
  29.             TL0=(65536-50000)%256;
  30.             count++;
  31.             if(count==2){
  32.                     count=0;
  33.                     num++;
  34.                     if(num==100)
  35.                             num=0;
  36.             }
  37.     }
  38.     void Key_Handle(){//按鍵處理
  39.             if(Key_State==0){
  40.                     Key_Num=(Key_Num+1)%3;
  41.                     switch(Key_Num){
  42.                             case 1:IE=0x82;TR0=1;break;
  43.                             case 2:IE=0x00;TR0=0;break;
  44.                             case 0:IE=0x00;TR0=0;num=0;break;
  45.                     }
  46.             }
  47.     }
  48.     void main(){
  49.             TMOD=0x01;
  50.             TH0=(65536-50000)/256;  //10ms
  51.             TL0=(65536-50000)%256;
  52.             if(Power_State!=Key_Power){
  53.                     DelayMS(10);
  54.                     if(Power_State!=Key_Power){
  55.                             Power_Num++;
  56.                             if(Power_Num%2==1){
  57.                                     while(1){
  58.                                             if(Key_State!=Key_Start){
  59.                                             DelayMS(10);
  60.                                             Key_State=Key_Start;
  61.                                             Key_Handle();
  62.                                             }
  63.                                     Dsy();
  64.                                     }
  65.                             }
  66.                     }
  67.             }
  68.     }
復制代碼

原帖:http://m.raoushi.com/bbs/dpj-100200-1.html

作者: xxxevery    時間: 2023-6-5 18:39
void Dsy(){  //顯示函數
            P2=0xfd;
            P0=Dsy_Code[num%10];
            DelayMS(2);
            P2=0xfe;
            P0=Dsy_Code[num/10];
            dp=1;
            DelayMS(2);
    }
是這部分嗎
作者: wulin    時間: 2023-6-5 20:13
樓主在論壇找個靠譜的程序學習。這個程序寫得太差,不值得研究。
作者: zt666    時間: 2023-6-5 21:56
xxxevery 發表于 2023-6-5 18:39
void Dsy(){  //顯示函數
            P2=0xfd;
            P0=Dsy_Code[num%10];

是的,這段看不懂
作者: yzwzfyz    時間: 2023-6-6 15:41
【P2=0xfd】要看硬件圖,估計:是選擇哪個LED導通,且是0通1止。
【P0=Dsy_Code[num%10]】也要看硬件圖,估計:是選擇LED上的段,決定哪些段亮。

作者: man1234567    時間: 2023-6-6 18:29
void Dsy(){  //顯示函數
            P2=0xfd; //選擇個位顯示,某教程中的位拉
            P0=Dsy_Code[num%10]; //輸出個位數字,某教程中的段拉
            DelayMS(2);  //延時
            P2=0xfe;  //選擇十位顯示,某教程中的位拉
            P0=Dsy_Code[num/10];  //輸出十位數字,某教程中的段拉
            dp=1;   //這個是毛不好猜,要看電路
            DelayMS(2);  //延時
    }
作者: chxelc    時間: 2023-6-6 18:47
這是一個數碼管顯示程序,P0口對應8段數碼管段碼,P2口對應數碼管位碼。
作者: xxxevery    時間: 2023-6-6 22:46
  
dp = 1 是顯示小數點。
段程序最難理解的應該是 P0=Dsy_Code[num%10]和P0=Dsy_Code[num/10]。
Dsy_Code[]是一個存儲數字顯示碼的數組,Dsy_Code[0]對應存儲的就是數字0的顯示碼,以此類推
num是要顯示的數字,舉個例子:num=25,那么25%10=5,就是個位上要顯示的數字,那么顯示碼就是Dsy_Code[5],
25/10=2,就是十位上要顯示的數字,那么顯示碼就是Dsy_Code[2]





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1