久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3867|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

4位數(shù)碼管時(shí)鐘單片機(jī)程序+PCB文件可直接打樣

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
求高手改時(shí)鐘顯示閃爍程序 和DS3231低溫度程序   程序是在論壇里下載的 還想在修改哈  望高手幫幫忙
Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int


  5. sbit SDA=P2^7;     //數(shù)據(jù)傳送位SDA        
  6. sbit SCL=P2^6;     //時(shí)鐘控制位SCL
  7. sbit INT=P3^3;     //中斷位
  8. sbit RESET=P3^2;   //復(fù)位
  9. sbit smg4=P1^1;    //位碼1聲明 分個(gè)位
  10. sbit smg3=P1^3;    //位碼2聲明 分十位
  11. sbit smg2=P1^5;    //位碼3聲明 時(shí)個(gè)位
  12. sbit smg1=P1^7;    //位碼4聲明 時(shí)十位
  13. sbit k1=P1^4;      //按鍵k1的聲明
  14. sbit k2=P1^6;      //按鍵k2的聲明
  15. sbit k3=P3^7;      //按鍵k3的聲明
  16. sbit bell=P3^5;    //蜂鳴器聲明
  17. sbit gm=P2^1;      //測(cè)光聲明,黑暗時(shí)等于1

  18. bit gm_en=0;       //光敏使能信號(hào);
  19. bit  ack;          //應(yīng)答標(biāo)志位

  20. char code dis_code[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};//數(shù)碼管沒(méi)有按a-h的順序連接,自定義的顯示字庫(kù),0-9,A-F
  21. //0X28,0XEE,0X32,0XA2,0XE4,0XA1,0X21,0XEA,0X20,0XA0,0X60,0X25,0X37,0X26,0X31,0X71
  22. uchar bell_en=0,x=1;//鬧鐘使能信號(hào),任意鍵關(guān)閉鈴聲標(biāo)志位
  23. uchar tabtime[]={0x00,0x00,0x07,0x02,0x23,0x10,0x18};                //首次上電時(shí)默認(rèn)的時(shí)間2018年 星期二 10月23日 07:00:00
  24. uchar year,month,day,week,hour,minute,second,temperature;             //從1302讀出的實(shí)時(shí)時(shí)間數(shù)據(jù)
  25. uchar gm_time=60,temp_en=0,n=0,a=0,b=0;       //gm_time光敏控制亮度值,n是按鍵標(biāo)志位,a產(chǎn)生一個(gè)1秒的計(jì)時(shí),b控制字符閃爍,temp_en溫度顯示標(biāo)志

  26. uint  t=0;      //用來(lái)產(chǎn)生30秒的計(jì)時(shí)
  27. uint  TtempH,TtempL;    //定義溫度高位,低位

  28. char shi,fen,miao,b_shi=7,b_fen=0; //必須使用符號(hào)型:數(shù)據(jù)暫存單元shi/fen/miao,鬧鈴時(shí)間b_shi,b_fen,

  29. void baojing();               //報(bào)警函數(shù)
  30. void delay_50us(uint t);      //延時(shí)50*T微妙函數(shù)的聲明
  31. void Start_I2C();             //I2C總線產(chǎn)生起始信號(hào)函數(shù)
  32. void Stop_I2C();              //I2C總線產(chǎn)生停止信號(hào)函數(shù)
  33. void Ack_I2C(bit a);          //接收應(yīng)答信號(hào)函數(shù);
  34. void SendByte(uchar c);       //向I2C總線寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)函數(shù)
  35. uchar RcvByte();              //字節(jié)數(shù)據(jù)接收函數(shù)
  36. uchar write_byte(uchar addr, uchar write_data);//將一個(gè)字節(jié)寫(xiě)入DS3231指定地址
  37. uchar read_byte(uchar addr);  //從DS3231指定地址讀一個(gè)字節(jié)
  38. void Set_Time();              //設(shè)置時(shí)間
  39. void get_time(void);          //讀取時(shí)間
  40. void get_Temperature();       //讀取溫度
  41. void show_Temperature();      //顯示溫度
  42. void init();                  //初始化函數(shù)
  43. void timer0();                //定時(shí)器0中斷服務(wù)程序
  44. void display(uchar s,f);      //顯示子程序
  45. void key();                   //按鍵控制函數(shù)


  46. void baojing()//報(bào)警函數(shù)
  47. {
  48.    uint j=10,i=10;
  49.    bell=0;
  50.    while(i--)display(shi,fen);
  51.    bell=1;
  52.    while(j--)display(shi,fen);
  53. }



  54. //函數(shù)名稱:void delay_50US(unsigned int t)
  55. //功能: 延時(shí)50*t(us)
  56. void delay_50us(uint t)
  57. {
  58.   unsigned char j;
  59.   for(;t>0;t--)
  60.   {
  61.     for(j=19;j>0;j--);
  62.   }
  63. }


  64. void Start_I2C()            //I2C總線產(chǎn)生起始信號(hào)函數(shù)
  65. {
  66.     SDA=1;                  //拉高數(shù)據(jù)線,發(fā)送起始條件的數(shù)據(jù)信號(hào)
  67.     SCL=1;                  //拉高時(shí)鐘線
  68.     SDA=0;                  //在時(shí)鐘線為高電平時(shí),拉低數(shù)據(jù)線,產(chǎn)生起始信號(hào)
  69.     SCL=0;                  //鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)
  70. }


  71. void Stop_I2C()             //I2C總線產(chǎn)生停止信號(hào)函數(shù)
  72. {
  73.     SDA=0;                  //拉低數(shù)據(jù)線,發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)
  74.     SCL=1;                  //拉高時(shí)鐘線,發(fā)送結(jié)束條件的時(shí)鐘信號(hào)
  75.     SDA=1;                  //時(shí)鐘時(shí)線為高電平時(shí),拉高數(shù)據(jù)線,發(fā)送I2C總線結(jié)束信號(hào)
  76. }


  77. /********************************************************************
  78.                       應(yīng)答子函數(shù)
  79. 函數(shù)原型:   void I2CACK(bit a);
  80. 功能:       主控器進(jìn)行應(yīng)答信號(hào)(可以是應(yīng)答或非應(yīng)答信號(hào),由位參數(shù)a決定)
  81. ********************************************************************/

  82. void Ack_I2C(bit a)         //接收應(yīng)答信號(hào)函數(shù);a是定義的一個(gè)位變量,來(lái)暫存應(yīng)答狀態(tài)。
  83. {

  84.     if(a==0)
  85.         SDA=0;              //在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)
  86.     else
  87.         SDA=1;
  88.     SCL=1;
  89.     SCL=0;                  //清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收
  90. }




  91. /*******************************************************************
  92.                   字節(jié)數(shù)據(jù)發(fā)送函數(shù)               
  93. 函數(shù)原型:     void   SendByte(uchar c);
  94. 功能:      將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對(duì)
  95.            此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0)
  96.            ack=1        發(fā)送數(shù)據(jù)正常,
  97.            ack=0        被控器無(wú)應(yīng)答或損壞。
  98. ********************************************************************/

  99. void SendByte(uchar c)                      //向I2C總線寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)函數(shù)
  100. {
  101.     uchar BitCnt;
  102.    
  103.     for(BitCnt=0;BitCnt<8;BitCnt++)         //要傳送的數(shù)據(jù)長(zhǎng)度為8位
  104.     {
  105.         if((c<<BitCnt)&0x80)
  106.             SDA=1;                          //判斷發(fā)送位
  107.         else
  108.             SDA=0;               

  109.           SCL=1;                            //置時(shí)鐘線為高,通知被控器開(kāi)始接收數(shù)據(jù)位
  110.           SCL=0;
  111.     }
  112.    
  113.     SDA=1;                                  //8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位
  114.     SCL=1;
  115.     if(SDA==1)
  116.         ack=0;   
  117.     else
  118.         ack=1;                              //判斷是否接收到應(yīng)答信號(hào)
  119.     SCL=0;
  120. }




  121. /*******************************************************************
  122.                   字節(jié)數(shù)據(jù)接收函數(shù)               
  123. 函數(shù)原型:     uchar   RcvByte();
  124. 功能:      用來(lái)接收從器件傳來(lái)的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)),
  125.            發(fā)完后請(qǐng)用應(yīng)答函數(shù)應(yīng)答從機(jī)。  
  126. ********************************************************************/
  127. uchar RcvByte()    //字節(jié)數(shù)據(jù)接收函數(shù)
  128. {
  129.    uchar retc;
  130.    uchar BitCnt;

  131.    retc=0;
  132.    SDA=1;                           //置數(shù)據(jù)線為輸入方式
  133.    for(BitCnt=0;BitCnt<8;BitCnt++)
  134.    {
  135.         SCL=0;                      //置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位
  136.         SCL=1;                      //置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效
  137.         retc=retc<<1;
  138.         if(SDA==1)
  139.             retc=retc+1;            //讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中
  140.    }
  141.    SCL=0;
  142.    return(retc);
  143. }







  144. /***********將一個(gè)字節(jié)寫(xiě)入DS3231指定地址***********/

  145. uchar write_byte(uchar addr, uchar write_data)
  146. {
  147.     Start_I2C();
  148.     SendByte(0xD0);
  149.     if (ack == 0)
  150.         return 0;
  151.    
  152.     SendByte(addr);   
  153.     if (ack == 0)
  154.         return 0;
  155.    
  156.     SendByte(write_data);
  157.     if (ack == 0)
  158.         return 0;
  159.    
  160.     Stop_I2C();
  161.     return 1;
  162. }

  163. /************從DS3231指定地址讀一個(gè)字節(jié)************/
  164. uchar read_byte(uchar addr)
  165. {
  166.     uchar read_data;

  167.     Start_I2C();
  168.     SendByte(0xD0);
  169.     if(ack==0)
  170.         return(0);
  171.    
  172.     SendByte(addr);
  173.     if(ack==0)
  174.         return(0);
  175.        
  176.     Start_I2C();

  177.     SendByte(0xD1);
  178.     if(ack==0)
  179.         return(0);

  180.     read_data = RcvByte();
  181.     Ack_I2C(1);
  182.     Stop_I2C();
  183.         return read_data;
  184. }




  185. /**************************設(shè)置時(shí)間******************************************/


  186. void Set_Time()
  187. {
  188.     uchar i;
  189.     uchar ucAddr=0x00;      //秒的地址
  190.     for(i=0;i<7;i++)
  191.     {
  192.        write_byte(ucAddr,tabtime[i]);//從秒開(kāi)始連續(xù)寫(xiě)入秒分時(shí)星期日月年
  193.        ucAddr+=1;
  194.         }
  195. }





  196. /*********************讀取時(shí)間**********************/
  197. void get_time(void)
  198. {
  199.     hour=read_byte(0x02)/16*10+read_byte(0x02)%16;
  200.         minute=read_byte(0x01)/16*10+read_byte(0x01)%16;    //因只顯示時(shí)、分,故可只讀取時(shí)、分
  201.     year=read_byte(0x06)/16*10+read_byte(0x06)%16;
  202.        
  203.         /*
  204.     uchar i;
  205.         uchar ucCurtime[7];
  206.         uchar ucAddr = 0x00;     //秒地址

  207.         for(i=0;i<7;i++)
  208.         {ucCurtime[i]=0;}
  209.        
  210.         for(i=0; i<7; i++)
  211.         {
  212.                 ucCurtime[i] = read_byte(ucAddr);  //格式為: 從秒地址開(kāi)始連續(xù)讀取,秒分時(shí)星期日月年。               
  213.                 ucAddr += 1;
  214.         }

  215.         year=ucCurtime[6]/16*10+ucCurtime[6]%16;
  216.         month=ucCurtime[5]/16*10+ucCurtime[5]%16;
  217.         day=ucCurtime[4]/16*10+ucCurtime[4]%16;
  218.         week=ucCurtime[3]/16*10+ucCurtime[3]%16;
  219.         hour=ucCurtime[2]/16*10+ucCurtime[2]%16;
  220.         minute=ucCurtime[1]/16*10+ucCurtime[1]%16;
  221.         second=ucCurtime[0]/16*10+ucCurtime[0]%16;
  222.         */
  223. }




  224. /*********************讀取溫度**********************/
  225. void get_Temperature()
  226. {
  227.     TtempH=read_byte(0X11);   //讀溫度高字節(jié)
  228.         //因數(shù)碼管位數(shù)只有四位,故溫度的小數(shù)部分不顯示,可以不用讀溫度低字節(jié)
  229.         TtempL=read_byte(0x12);  //原為注釋不用ox12   //讀溫度低字節(jié)
  230.         TtempL=(TtempL>>6)*25;   //原為注釋不用    //將BIT7,BIT6的數(shù)據(jù)移入BIT1,BIT0位;分辨率數(shù)值擴(kuò)大100倍便于整數(shù)運(yùn)算
  231.    
  232. }
  233. void show_Temperature()   //顯示溫度
  234. {
  235.     if((TtempH&0X80)==0x80)   //判斷首字節(jié)為1即為零下溫度
  236.     {
  237.            P0=0xBF;           //0xbf第一位數(shù)碼管顯示“-”
  238.            smg1=0;
  239.            delay_50us(gm_time);
  240.        smg1=1;
  241.           //////
  242.          P0=dis_code[TtempL/10];//送顯示斷碼  十位
  243.                 smg2=0;
  244.         delay_50us(gm_time);
  245.                 smg2=1;   
  246.          P0=dis_code[TtempL%10];//送顯示斷碼  個(gè)位
  247.         smg3=0;        
  248.     delay_50us(gm_time);
  249.     smg3=1;

  250.     P0=0xC6;               //送顯示斷碼  ℃
  251.     smg4=0;
  252.     delay_50us(gm_time);
  253.     smg4=1;  
  254.              
  255.    }


  256.         else
  257.            smg1=1;              //第一位數(shù)碼管不顯示


  258.     if((TtempH/10)==0)     //原為0 溫度低于10度時(shí),即為個(gè)位時(shí),第二位數(shù)碼管位不顯示
  259.        smg2=1;           //原為=1
  260.     else
  261.     {
  262.         P0=dis_code[TtempH/10];//送顯示斷碼  十位
  263.                 smg2=0;
  264.         delay_50us(gm_time);
  265.                 smg2=1;
  266.     }
  267.                        
  268.     P0=dis_code[TtempH%10];//送顯示斷碼  個(gè)位
  269.         smg3=0;        
  270.     delay_50us(gm_time);
  271.     smg3=1;

  272.     P0=0xC6;               //送顯示斷碼  ℃
  273.     smg4=0;
  274.     delay_50us(gm_time);
  275.     smg4=1;
  276.        
  277.        

  278. }


  279. void init()        //初始化函數(shù)
  280. {
  281.    write_byte(0x0e,0x00);    //設(shè)定DS3231的控制寄存器
  282.    IE=0X82;    //設(shè)定單片機(jī)的中斷允許控制寄存器,(1000 0010)
  283.    TMOD=0X01;    //0000 0001選擇定時(shí)器0的工作方式1 選擇定時(shí)器1的工作方式0
  284.    TH0=(65536-50000)/256;//初值15536定時(shí)50mS
  285.    TL0=(65536-50000)%256;
  286.    TR0=1; //設(shè)定TCON的TR0位,開(kāi)啟定時(shí)器0
  287. }

  288. void timer0() interrupt 1  //定時(shí)器0中斷服務(wù)程序,用來(lái)設(shè)置冒號(hào)閃爍頻率
  289. {
  290.    TH0=(65536-50000)/256;//進(jìn)入中斷重新賦初值15536
  291.    TL0=(65536-50000)%256;//計(jì)數(shù)5萬(wàn)次(50毫秒)
  292.    a++;                  //標(biāo)志位b,用來(lái)確定光標(biāo)閃爍頻率
  293.    t++;
  294.    if(t==600)t=0;         //50ms*600次=30秒,用于溫度顯示,30秒一次
  295.    if(t>520)temp_en=1;    //溫度顯示持續(xù)3秒
  296.    else temp_en=0;
  297.    if(a==20)a=0;//a=20 時(shí)被清零  產(chǎn)生一個(gè)1秒的計(jì)時(shí)。
  298. }




  299. //四位數(shù)碼管顯示程序
  300. void  display(uchar s,f)
  301. {
  302.    if((s/10)<1) //小于10,第一位不顯示
  303.       smg1=1;
  304.    else
  305.    {
  306.       P0=dis_code[s/10];//送顯示斷碼  時(shí)的十位
  307.       if((n==1||n==3)&&a<5)
  308.         smg1=1;              //鎖存數(shù)據(jù)
  309.       else
  310.             smg1=0;
  311.       delay_50us(gm_time);
  312.       smg1=1;
  313.    }


  314.       P0=dis_code[s%10];      //送顯示斷碼         時(shí)的個(gè)位
  315.    if((n==1||n==3)&&a<5)         
  316.       smg2=1;
  317.    else
  318.       smg2=0;                   //鎖存數(shù)據(jù)
  319.    delay_50us(gm_time);
  320.    smg2=1;         
  321.   
  322.    
  323.    
  324.    if((n==2||n==4)&&a<5)        
  325.       P0=0x7F;            //字符閃爍,小點(diǎn)不閃
  326.    else if(a>=10)                        
  327.       P0=dis_code[f/10]-0x80; //小點(diǎn)閃爍,字符不閃
  328.    else                                   
  329.       P0=dis_code[f/10];      //送顯示斷碼  分的十位
  330.    smg3=0;
  331.    delay_50us(gm_time);
  332.    smg3=1;



  333.    if((n==2||n==4)&&a<5)        
  334.       P0=0x7F;            //字符閃爍,小點(diǎn)不閃
  335.    else if(a>=10)                        
  336.       P0=dis_code[f%10]-0x80; //小點(diǎn)閃爍,字符不閃
  337.    else                                   
  338.       P0=dis_code[f%10];      //送顯示斷碼  分的個(gè)位
  339.    smg4=0;
  340.    delay_50us(gm_time);
  341.    smg4=1;

  342. }




  343. void key()                        //按鍵控制函數(shù)
  344. {
  345.    
  346.    if(k1==0&&k2==0)          //k1k2同時(shí)按下,切換鬧鈴開(kāi)關(guān) 并且在按下之后查看鬧鐘時(shí)間松手后恢復(fù)時(shí)間顯示
  347.    {
  348.       delay_50us(40);
  349.       if(k1==0&&k2==0)
  350.       {        
  351.          if(bell_en==1&&b_shi==hour&&b_fen==minute&&x==1)
  352.                x=0;                      //如果處于響零狀態(tài),就任意鍵關(guān)閉響鈴   
  353.              shi=b_shi;
  354.          fen=b_fen;
  355.          bell_en=!bell_en;
  356.          if(bell_en==1)       //使能的話報(bào)警兩聲
  357.          {
  358.             
  359.                     baojing();
  360.                         baojing();
  361.          }
  362.                  else
  363.                  {
  364.             
  365.                     baojing();    //無(wú)效的話報(bào)警一聲
  366.                  }
  367.          while(k1==0&&k2==0)
  368.                  display(shi,fen);//等待松手
  369.          shi=hour;
  370.          fen=minute;
  371.       }
  372.    }
  373.    if(k1==0&&k3==0) //k1k3同時(shí)按下,切換光控功能
  374.    {
  375.       delay_50us(40);
  376.       if(k1==0&&k3==0)
  377.       {        
  378.          gm_en=!gm_en;
  379.                  if(bell_en==1&&b_shi==hour&&b_fen==minute&&x==1)
  380.                x=0;                      //如果處于響零狀態(tài),就任意鍵關(guān)閉響鈴   
  381.          if(gm_en==1)       //使能的話報(bào)警兩聲
  382.          {
  383.                     baojing();
  384.                         baojing();
  385.          }
  386.          else baojing();    //無(wú)效的話報(bào)警一聲
  387.          while(k1==0&&k3==0)
  388.                  display(88,88);//等待松手
  389.       }
  390.    }
  391.    
  392.   
  393.    if(k2==0&&k3==0)                         //K2,K3同時(shí)按下,進(jìn)入 調(diào)時(shí)間 和  鬧鈴狀態(tài)
  394.    {                        //功能鍵k1被按下
  395.       delay_50us(40);      //消抖延時(shí)
  396.       if(k2==0&&k3==0)
  397.           {
  398.              if(bell_en==1&&b_shi==hour&&b_fen==minute&&x==1)
  399.                x=0;                      //如果處于響零狀態(tài),就任意鍵關(guān)閉響鈴      
  400.              while(k2==0&&k3==0)
  401.                   n=1;
  402.           
  403.       }

  404.                                //要加入數(shù)字閃爍代碼
  405.    }        

  406.    
  407.    
  408.    
  409.    
  410.    if(n==0)//狀態(tài)0,正常顯示時(shí)間
  411.    {
  412.       b=a; //b是控制小數(shù)點(diǎn)閃爍的
  413.       shi=hour;
  414.       fen=minute;
  415.    }


  416.    
  417.    if(n==1)    //狀態(tài)1:調(diào)節(jié)時(shí)間的"時(shí)"
  418.    {
  419.       b=10;
  420.       
  421.           if(k1==0)
  422.           {
  423.              delay_50us(40);      //消抖延時(shí)
  424.              if(k1==0)   
  425.          {
  426.                     while(k1==0)
  427.                       n=2;
  428.                  }
  429.       }
  430.           
  431.           if(k2==0)
  432.           {
  433.              delay_50us(40);      //消抖延時(shí)
  434.              if(k2==0)//k2被按下
  435.                    shi=shi+1;   //小時(shí)加一
  436.          if(shi>=24)
  437.            shi=0;   //達(dá)到24清零
  438.          while(k2==0)
  439.          display(shi,fen);
  440.       }
  441.       
  442.           if(k3==0)
  443.           {
  444.              delay_50us(40);      //消抖延時(shí)
  445.              if(k3==0) //k3被按下
  446.            shi--; //小時(shí)減一
  447.          if(shi<0)
  448.            shi=23;//小于0,重新賦值
  449.                  while(k3==0)
  450.                  display(shi,fen);
  451.       }
  452.    }
  453.   
  454.    if(n==2)//狀態(tài)2:調(diào)節(jié)時(shí)間的"分"
  455.    {        
  456.       b=10;
  457.       
  458.           if(k1==0)
  459.           {
  460.              delay_50us(40);      //消抖延時(shí)
  461.              if(k1==0)   
  462.                  {
  463.                     while(k1==0)
  464.              n=3;
  465.                  }
  466.          tabtime[2]=shi/10*16+shi%10;
  467.          tabtime[1]=fen/10*16+fen%10;
  468.       
  469.              hour=shi;
  470.          minute=fen;

  471.          Set_Time();//設(shè)置DS1302的初始時(shí)間              
  472.                  
  473.       }          
  474.           
  475.           
  476.           if(k2==0)//k2被按下
  477.       {
  478.          delay_50us(40);      //消抖延時(shí)
  479.          if(k2==0)
  480.             fen++;//分加一
  481.          if(fen>=60)
  482.             fen=0;//分到達(dá)60 分清零   
  483.                  while(k2==0)
  484.                     display(shi,fen);
  485.       }
  486.       
  487.           if(k3==0)//k3被按下
  488.       {            
  489.          delay_50us(40);      //消抖延時(shí)
  490.          if(k3==0)
  491.             fen--;//分減一
  492.          if(fen<0)
  493.             fen=59;//分小于0,分重新賦值59   
  494.                  while(k3==0)
  495.                  display(shi,fen);                                       
  496.       }

  497.   
  498.    }
  499.    
  500.    
  501.    if(n==3)//狀態(tài)三:調(diào)節(jié)鬧鈴"時(shí)"
  502.    {        

  503.       b=10;
  504.       shi=b_shi;
  505.       fen=b_fen;   
  506.    
  507.           if(k1==0)
  508.           {
  509.              delay_50us(40);      //消抖延時(shí)
  510.              if(k1==0)   
  511.                  {
  512.                     while(k1==0)
  513.                          n=4;
  514.                  }
  515.       }      
  516.           
  517.           if(k2==0)//k2被按下
  518.       {        
  519.          delay_50us(40);      //消抖延時(shí)
  520.          if(k2==0)
  521.             b_shi++;//鬧鈴時(shí)間加一
  522.          if(b_shi>=24)
  523.             b_shi=0;//鬧鈴時(shí)間清零     
  524.                  while(k2==0)
  525.                  display(shi,fen);
  526.       }
  527.       
  528.           if(k3==0)//k3被按下
  529.       {           
  530.          delay_50us(40);      //消抖延時(shí)
  531.          if(k3==0)
  532.             b_shi--;//鬧鈴時(shí)間減一
  533.          if(b_shi<0)
  534.             b_shi=23;//鬧鈴時(shí)間
  535.                  while(k3==0)
  536.                  display(shi,fen);
  537.       }

  538.    }
  539.    
  540.    
  541.    if(n==4)//狀態(tài)四 :調(diào)節(jié)鬧鈴的"分"
  542.    {      
  543.       b=10;
  544.       shi=b_shi;
  545.       fen=b_fen;
  546.       
  547.           if(k1==0)
  548.           {
  549.              delay_50us(40);      //消抖延時(shí)
  550. ……………………

  551. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載:
0.8寸數(shù)碼管 PCB 電路圖 程序.rar (3.56 MB, 下載次數(shù): 82)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:53978 發(fā)表于 2021-10-7 15:04 | 只看該作者
本帖最后由 smartphone 于 2021-10-7 17:54 編輯

按照這個(gè)代碼在開(kāi)發(fā)板上測(cè)試了可以正常顯示,但數(shù)碼管閃爍,不知道什么原因,有大神能指點(diǎn)一下嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区在线 | 国产高清一区二区 | www.天天操.com| 精品久久久久久亚洲精品 | 91精品国产综合久久久密闭 | 午夜综合| 天天拍天天射 | 中文字幕日韩一区 | 亚洲首页 | 色性av| 欧美理论片在线观看 | 一区中文字幕 | 国产yw851.c免费观看网站 | 久久久蜜桃 | 天天操精品视频 | 午夜在线视频 | 国产精品不卡一区 | 凹凸日日摸日日碰夜夜 | 91亚洲国产成人久久精品网站 | 免费网站国产 | 成人免费毛片片v | 免费小视频在线观看 | 国产久| 99久久久99久久国产片鸭王 | 一级免费毛片 | 免费欧美 | 亚洲午夜精品在线观看 | 国产成人精品视频在线观看 | 日本三级线观看 视频 | 男人av的天堂| 久草99 | 中文字幕人成乱码在线观看 | 欧美日韩综合 | 久久精品成人 | 亚洲一区二区三区在线播放 | 国产成人99久久亚洲综合精品 | 国产一区二区久久 | 一级片在线观看视频 | 国产精品久久久久久久久免费相片 | 成人在线视 | 午夜视频免费在线观看 |