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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1381|回復: 1
收起左側

通過單片機定時器實現時鐘的51程序

[復制鏈接]
ID:383209 發表于 2018-8-5 20:36 | 顯示全部樓層 |閱讀模式
可以通過定時器編寫萬年歷中的1時鐘程序,十分簡單

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar count0,count1;
  6. uchar temp0,temp1 = 0x7f,temp2,temp3;
  7. uchar code leddata[] = {0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
  8. void Delay100us()                //@11.0592MHz
  9. {
  10.         unsigned char i,j;

  11.         _nop_();
  12.         _nop_();
  13.         i = 2;
  14.         j = 15;
  15.         do
  16.         {
  17.                 while (--j);
  18.         } while (--i);
  19. }
  20. void Delay500ms()                //@11.0592MHz
  21. {
  22.         unsigned char i, j, k;

  23.         _nop_();
  24.         _nop_();
  25.         i = 22;
  26.         j = 3;
  27.         k = 227;
  28.         do
  29.         {
  30.                 do
  31.                 {
  32.                         while (--k);
  33.                 } while (--j);
  34.         } while (--i);
  35. }

  36. void display(uchar t)
  37. {
  38.   uchar ge,shi;
  39.   shi = t/10;
  40.   ge = t%10;
  41.   P2 = 0xe0;P0 =leddata[ge];P2 = 0x00;
  42.   P2 = 0xc0;P0 = 0x80;P2 = 0x00;
  43.   Delay100us();
  44.   P2 = 0xe0;P0 =leddata[shi];P2 = 0x00;
  45.   P2 = 0xc0;P0 = 0x40;P2 = 0x00;
  46.   Delay100us();
  47.   P2 = 0xc0;P0 = 0x00;P2 = 0x00;
  48.   P2 = 0xe0;P0 =0xbf;P2 = 0x00;
  49.   P2 = 0xc0;P0 = 0x20;P2 = 0x00;
  50.   Delay100us();
  51. }
  52. void display1(uchar a)
  53. {
  54.   uchar ge,shi;
  55.   ge = a%10;
  56.   shi = a/10;
  57.   P2 = 0xe0;P0 = leddata[ge];P2 = 0x00;
  58.   P2 = 0xc0;P0 = 0x10;P2 = 0x00;
  59.   Delay100us();
  60.   P2 = 0xe0;P0 =leddata[shi];P2 = 0x00;
  61.   P2 = 0xc0;P0 = 0x08;P2 = 0x00;
  62.   Delay100us();
  63.   P2 = 0xc0;P0 = 0x00;P2 = 0x00;
  64.   P2 = 0xe0;P0 = 0xbf;P2 = 0x00;
  65.   P2 = 0xc0;P0 = 0x04;P2 = 0x00;
  66.   Delay100us();
  67. }
  68. void display2(uchar c)
  69. {
  70.   uchar ge,shi;
  71.   ge = c%10;
  72.   shi = c/10;
  73.   P2 = 0xe0;P0 =leddata[ge];P2 = 0x00;
  74.   P2 = 0xc0;P0 = 0x02;P2 = 0x00;
  75.   Delay100us();
  76.   P2 = 0xe0;P0 =leddata[shi];P2 = 0x00;
  77.   P2 = 0xc0;P0 = 0x01;P2 = 0x00;
  78.   Delay100us();
  79. }
  80. /*void init()                          //定時器內部中斷0
  81. {
  82.   TMOD = 0x11;
  83.   TH1 = TH0 = 0X4B;
  84.   TL1 = TH0 = 0XFC;
  85.   ET1 = ET0 = 1;
  86.   TR1 = TR0 = 1;
  87.   EX0 = 1;                  //開啟外部中斷0
  88.   IT0 = 0;                  //設置外部中斷啟動方式為低電平啟動
  89.   EA = 1;
  90. }*/
  91. #define KEYPORT P3
  92. uchar Trg;
  93. uchar Cont,d;
  94. void Key_Read( void )
  95. {
  96.     unsigned char ReadData = KEYPORT^0xff;
  97.     Trg = ReadData & (ReadData ^ Cont);      
  98.     Cont = ReadData;                                        
  99. }
  100. void shijianshezhi()
  101. {
  102.   Key_Read();
  103.   if(Trg&0x08) //S4
  104.   {
  105.      TR0 = 0;
  106.   }
  107.   if(Trg&0x04) //S5
  108.   {
  109.      TR0 = 1;
  110.   }
  111. }
  112. void shijianhanshu()
  113. {
  114.           if(TF0 == 1)
  115.           {
  116.             count0++;
  117.                 TF0 = 0;
  118.                 TH0 = 0x4b;
  119.             TL0 = 0Xfc;
  120.           }
  121.           if(count0 == 20)
  122.           {
  123.             count0 = 0;
  124.                 temp0++;
  125.           }
  126.           if(temp0 == 60)
  127.           {
  128.             temp2++;
  129.                 P2=0xa0;P0=0xff;P2=0X00;
  130.                 Delay500ms();
  131.                 P2=0xa0;P0=0x00;P2=0X00;                                             
  132.                 temp0 = 0;
  133.           }
  134.           if(temp2 == 60)
  135.           {
  136.             temp3++;
  137.                 temp2 = 0;
  138.           }
  139.           display(temp0);
  140.           display1(temp2);
  141.           display2(temp3);
  142. }
  143. void main()
  144. {
  145.    TMOD = 0X01;
  146.    TH0 = 0x4b;
  147.    TL0 = 0Xfc;
  148.    while(1)
  149.    {
  150.       shijianhanshu();
  151.           shijianshezhi();
  152.    }
  153. }

復制代碼

所有資料51hei提供下載:
定時器實現時鐘的51程序.docx (12.71 KB, 下載次數: 8)



回復

使用道具 舉報

ID:382322 發表于 2018-8-11 17:21 | 顯示全部樓層
定時器做的時鐘,誤差會很大,不是很好哦!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线观看视频一区二区三区 | 亚洲成人精品在线观看 | 1区2区3区视频 | 国产乱码精品一区二区三区忘忧草 | 美女精品一区 | 国产91久久久久蜜臀青青天草二 | 国产精品成av人在线视午夜片 | 99精品福利视频 | 亚洲一二三区在线观看 | 国产精品久久久久一区二区 | 国产成人自拍一区 | 国产伦精品一区二区三区照片91 | 精品欧美一区二区精品久久久 | 成人精品视频在线观看 | 久草在线免费资源 | 日本精品一区二区三区在线观看 | 亚洲香蕉在线视频 | 成人 在线| 中文字幕在线观看av | 国产一区中文字幕 | h视频网站在线观看 | 亚洲精品黄色 | 99精品久久99久久久久 | 国产精品毛片一区二区三区 | 日韩一区中文字幕 | 九热在线| 亚洲国产成人精品女人久久久 | 日韩欧美在线一区 | 在线一区视频 | av一区二区三区四区 | 一区二区三区四区不卡视频 | 一区二区三区欧美在线 | 日本一区二区三区在线观看 | 成人性生交a做片 | 999精品视频在线观看 | 午夜精品久久久久久久星辰影院 | 精品视频一区二区在线观看 | 九九久久国产精品 | 成人亚洲视频 | 日韩久久精品 | 91精品国产欧美一区二区成人 |