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

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

QQ登錄

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

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

51單片機(jī)電子時(shí)鐘程序 IAP15F4K-HC595-Test(完整)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:514797 發(fā)表于 2019-5-25 16:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
51單片機(jī)電子時(shí)鐘程序

單片機(jī)源程序如下:
  1. #include "intrins.h"
  2. #include "string.h"
  3. #include "STC15Fxxxx.H"
  4. #include "main.h"
  5. #include  "HC595.H"
  6. #include "ds1302.h"
  7. //秒分時(shí)日月周年
  8. int Set_Time[3];
  9. unsigned char TIMES[7] = {0x30,0x30,0x10,0x30,0x11,0x05,0x18};
  10. sbit SPEAKER  = P1^3;
  11. sbit SingleKey = P0^7;////把P0.7接地,設(shè)置P0.0~P0.3為4個(gè)獨(dú)立按鍵

  12. sbit KEY1 = P0^0;////P0.0為KEY1
  13. sbit KEY2 = P0^1;////P0.1為KEY2
  14. sbit KEY3 = P0^2;////P0.2為KEY3
  15. sbit KEY4 = P0^3;////P0.3為KEY4
  16. bit flag = 0,flag_ = 0;
  17. bit set_flag;
  18. unsigned char index = 0;
  19. unsigned char  scan_con[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};            //列掃描控制字
  20. unsigned char  displayDat[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};  //顯示單元數(shù)據(jù),共8個(gè)數(shù)據(jù)和一個(gè)運(yùn)算暫用
  21. void Delay10ms()                //@11.0592MHz
  22. {
  23.         unsigned char i, j;

  24.         i = 108;
  25.         j = 145;
  26.         do
  27.         {
  28.                 while (--j);
  29.         } while (--i);
  30. }

  31. //蜂鳴器函數(shù)
  32. //////////////////////////////////////
  33. void Beep(unsigned int dd)
  34. {
  35.     SPEAKER=1;
  36.         Delaylong(dd);
  37.         SPEAKER=0;
  38. }
  39. ////////////////////////////////////////////////////
  40. void Delaylong(unsigned int t)//
  41. {
  42.         unsigned int i,j;
  43.         for(i=0;i<t;i++)
  44.         {
  45.                 for(j=0;j<10;j++);
  46.         }
  47. }
  48. ///////////////////////////////////////////////////////////////////////
  49. // 串口初始化函數(shù)
  50. ///////////////////////////////////////////////////////////////////////
  51. void UartInit(void)                //9600bps@11.0592MHz
  52. {
  53.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  54.         AUXR |= 0x40;                //定時(shí)器1時(shí)鐘為Fosc,即1T
  55.         AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
  56.         TMOD &= 0x0F;                //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
  57.         TL1 = 0xE0;                //設(shè)定定時(shí)初值
  58.         TH1 = 0xFE;                //設(shè)定定時(shí)初值
  59.         ET1 = 0;                //禁止定時(shí)器1中斷
  60.         TR1 = 1;                //啟動(dòng)定時(shí)器1
  61.        
  62. //        ES = 1; //使能串口1中斷
  63.         REN =1;
  64. }
  65. ////////////////////////////
  66. void PortInit()
  67. {
  68.    P0M1 =0X00;
  69.    P0M0 =0X00;

  70.    P1M1 =0X00;
  71.    P1M0 =0X0C;////P1.2、P1.3強(qiáng)驅(qū)動(dòng)模式,P1.2繼電器,P1.3蜂鳴器

  72.    P2M1 =0X00;
  73.    P2M0 =0X00;

  74.    P3M1 =0X00;
  75.    P3M0 =0X00;

  76.    P4M1 =0X00;
  77.    P4M0 =0X00;

  78.    P5M1 =0X00;
  79.    P5M0 =0X00;
  80.    
  81.    SingleKey = 0;////把P0.7接地,設(shè)置P0.0~P0.3為4個(gè)獨(dú)立按鍵
  82.    KEY1 =1;
  83.    KEY2 =1;
  84.    KEY3 =1;
  85.    KEY4 =1;
  86. }
  87. void Timer0Init(void)                //10毫秒@11.0592MHz
  88. {
  89.         AUXR &= 0x7F;                //定時(shí)器時(shí)鐘12T模式
  90.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  91.         TL0 = 0x00;                //設(shè)置定時(shí)初值
  92.         TH0 = 0xDC;                //設(shè)置定時(shí)初值
  93.         TF0 = 0;                //清除TF0標(biāo)志
  94.         TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
  95.         ET0 = 1;
  96.         EA = 1;
  97. }
  98. void data_abs()
  99. {
  100.             displayDat[0] =  TIMES[6]/10;
  101.          displayDat[1] =  TIMES[6]%10;
  102.          displayDat[2] =  TIMES[4]/10;
  103.          displayDat[3] =  TIMES[4]%10;
  104.          displayDat[4] =  TIMES[3]/10;
  105.          displayDat[5] =  TIMES[3]%10;
  106.          displayDat[6] =  TIMES[5]/10;
  107.          displayDat[7] =  TIMES[5]%10;
  108. }
  109. //時(shí)分秒處理數(shù)據(jù)處理
  110. void data_bas()
  111. {
  112.          displayDat[0] =  TIMES[2]/10;
  113.          displayDat[1] =  TIMES[2]%10;
  114.          displayDat[2] =  18;
  115.          displayDat[3] =  TIMES[1]/10;
  116.          displayDat[4] =  TIMES[1]%10;
  117.          displayDat[5] =  18;
  118.          displayDat[6] =  TIMES[0]/10;
  119.          displayDat[7] =  TIMES[0]%10;
  120. }
  121. //設(shè)置時(shí)間
  122. void sit_Time()
  123. {
  124.         if(set_flag == 0&&index == 0||index != 0)
  125.         {
  126.                 displayDat[0] =  Set_Time[0]/10;
  127.                 displayDat[1] =  Set_Time[0]%10;
  128.         }
  129.         if(set_flag == 1&&index == 0)
  130.         {
  131.                 displayDat[0] = 16;
  132.                 displayDat[1] = 16;       
  133.         }
  134.         displayDat[2] =  18;
  135.         if(set_flag == 0&&index == 1||index != 1)
  136.         {
  137.                 displayDat[3] =  Set_Time[1]/10;
  138.                 displayDat[4] =  Set_Time[1]%10;       
  139.         }
  140.         if(set_flag == 1&&index == 1)
  141.         {
  142.                 displayDat[3] =  16;
  143.                 displayDat[4] =  16;
  144.         }
  145.         displayDat[5] =  18;
  146.         if(set_flag == 0&&index == 2||index != 2)
  147.         {
  148.                 displayDat[6] =  Set_Time[2]/10;
  149.                 displayDat[7] =  Set_Time[2]%10;       
  150.         }
  151.         if(set_flag == 1&&index == 2)
  152.         {
  153.                 displayDat[6] =  16;
  154.                 displayDat[7] =  16;
  155.         }       
  156. }
  157. /**************************************************************************
  158. *函數(shù)名稱(chēng):main()
  159. *功能    :主函數(shù)
  160. **************************************************************************/  
  161. void main()
  162. {
  163.         unsigned int i;
  164.         AUXR =0x00;
  165.         PortInit();
  166.         UartInit(); // 串口1//注意,下載程序選擇晶振:11.0592MHz,波特率9600bps
  167.     Delaylong(500);       
  168.         Beep(5000);
  169.         //P6=0XFF;
  170.         Ds1302Init();
  171.         Timer0Init();
  172.         while(1)
  173.         {
  174.                 Ds1302ReadTime();//讀取時(shí)鐘信息
  175.                 if(KEY1 == 0)//切換界面
  176.                 {
  177.                         Delay10ms();
  178.                         if(KEY1 == 0)
  179.                                 flag = !flag;
  180.                         while(!KEY1);
  181.                 }
  182.                 if(KEY2 == 0)//設(shè)置時(shí)鐘
  183.                 {
  184.                         Delay10ms();
  185.                         if(KEY2 == 0)
  186.                         {
  187.                                 flag_ = 1;       
  188.                         }
  189.                         while(!KEY2);
  190.                 }
  191.                 if(flag_)//設(shè)置時(shí)鐘界面
  192.                 {
  193.                   
  194.                     if(flag == 0)
  195.                         {
  196.                         Set_Time[0] = TIMES[2];
  197.                         Set_Time[1] = TIMES[1];
  198.                         Set_Time[2] = TIMES[0];
  199.                         Ds1302Write(0x8E,0X00);//打開(kāi)寫(xiě)保護(hù)
  200.                         while(1)
  201.                         {
  202.                                 if(index == 3)
  203.                                 {
  204.                                         index = 0;
  205.                                         flag_ = 0;
  206.                                         break;
  207.                                 }
  208.                                 if(KEY2 == 0)
  209.                                 {
  210.                                     
  211.                                         Delay10ms();
  212.                                         if(KEY2 == 0)
  213.                                         {
  214.                                                 index++;
  215.                                         }
  216.                                         while(!KEY2);
  217.                                 }                                               
  218.                                 if(KEY3 == 0)//加
  219.                                 {

  220.                                         Delay10ms();
  221.                                         if(KEY3 == 0)
  222.                                                
  223.                                                 Set_Time[index] += 1;
  224.                                         while(!KEY3);
  225.                                 }
  226.                                 if(KEY4 == 0)//減
  227.                                 {
  228.                                         Delay10ms();
  229.                                         if(KEY4 == 0)                                               
  230.                                                 Set_Time[index] -= 1;
  231.                                         while(!KEY4);
  232.                                 }
  233.                                 if(Set_Time[0] > 23)Set_Time[0] = 0;
  234.                                 if(Set_Time[1] > 59)Set_Time[1] = 0;
  235.                                 if(Set_Time[2] > 59)Set_Time[2] = 0;
  236.                                 if(Set_Time[0] < 0)        Set_Time[0] = 23;
  237.                                 if(Set_Time[1] < 0)        Set_Time[1] = 59;
  238.                                 if(Set_Time[2] < 0)        Set_Time[2] = 59;
  239.                                 Ds1302Write(0x80,Set_Time[2]/10*16 + Set_Time[2]%10);
  240.                                 Ds1302Write(0x82,Set_Time[1]/10*16 + Set_Time[1]%10);
  241.                                 Ds1302Write(0x84,Set_Time[0]/10*16 + Set_Time[0]%10);
  242.                                 for(i=0;i<8;i++)  //8位LED掃描控制
  243.                                 {
  244.                                         sit_Time();
  245.                                         display(i,displayDat[i]);
  246.                                 }
  247.                         }
  248.                     Ds1302Write(0x8E,0x80);//禁止寫(xiě)保護(hù)
  249.                  }
  250.                 }
  251.                 if(flag_ == 0)//顯示時(shí)鐘界面
  252.                 {
  253.                         for(i=0;i<8;i++)  //8位LED掃描控制
  254.                         {
  255.                                 if(flag == 0)//顯示時(shí)分秒
  256.                                         data_bas();//數(shù)據(jù)處理
  257.                                 else                 //顯示年月日
  258.                                         data_abs();
  259.                                 display(i,displayDat[i]);
  260.                         }
  261.                 }
  262.         }
  263. }
  264. void  Timer0()interrupt 1
  265. {
  266.         static int i = 0;
  267.         TL0 = 0x00;                //設(shè)置定時(shí)初值
  268.         TH0 = 0xDC;                //設(shè)置定時(shí)初值
  269.         i++;
  270.         if(i == 100)//1s時(shí)間到了
  271.         {
  272.                 i = 0;
  273.                 set_flag = !set_flag;
  274.         }       
  275. }
復(fù)制代碼

所有資料51hei提供下載:
IAP15F4K-HC595-Test(完整)2.0板子.zip (113.19 KB, 下載次數(shù): 13)


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久中文 | 性大毛片视频 | 国产福利在线 | 久草视频网站 | 亚洲欧洲在线观看视频 | 成人一区二区三区在线 | 日韩精品区 | 欧美日韩三区 | 99欧美精品 | 99久久99热这里只有精品 | av中文字幕在线播放 | 免费久久网站 | 国产精品www| 精品免费av| 国产精品美女www爽爽爽 | 少妇午夜一级艳片欧美精品 | 国产精品一区二区三区四区 | 91精品一区二区三区久久久久 | 精品久久久久一区二区国产 | 国产精品亚洲综合 | 91在线网 | 精品成人在线视频 | 精品一区二区电影 | 在线91| 欧美电影一区 | 羞羞的视频在线观看 | 久久成人一区 | 国产特级毛片aaaaaa喷潮 | 欧美二区在线 | 97国产精品| 欧美 日韩 中文 | 国产精品久久久久久妇女6080 | 久久成人免费观看 | 日韩一区二区三区视频在线观看 | 欧美久久久久久 | www.天天操| 日本黄色片免费在线观看 | 欧美 日韩 国产 成人 | 国产成人免费 | 国产精品久久久久久久免费大片 | 热久久久|