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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1939|回復: 1
打印 上一主題 下一主題
收起左側

求解答:用proteus仿真實現時鐘(幫忙看下代碼,已寫好了但是顯示不對

[復制鏈接]
跳轉到指定樓層
樓主

代碼:
  1. /*********************************************************************************************************************
  2. 程序名稱:8位數碼管時鐘程序
  3. 函數功能:在8位數碼管上顯示包含小時,分鐘,秒鐘的C語言程序
  4. 程序版本:V1.0
  5. 調試狀態:成功
  6. 調試時間:2014.10.10
  7. 定時器初值計算方法:【16進制】65535-[(晶振頻率/12)/(1秒/定時的時間)]
  8. **********************************************************************************************************************/
  9. #include<reg52.h>
  10. #include<absacc.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int

  13. /*********************************************************************************************************************/
  14. //函數申明        
  15. void data_deal();  //數據處理函數
  16. void delay(uchar timer);//延時函數
  17. void   H_M_S_circle();//時鐘時分秒循環函數
  18. void display();//送顯示函數
  19. /*********************************************************************************************************************/
  20. unsigned char code table[]={
  21.   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
  22. //  0    1    2    3    4    5    6    7    8    9   
  23. };
  24. /*********************************************************************************************************************/
  25. //全局變量申明
  26. uchar time_flag;
  27. uchar Hour=0,Min=0,second=0;
  28. uchar DispBuf[8];        //定義顯示緩沖區——待顯示的數據(由定時中斷程序自動掃描),全局變量
  29. /*********************************************************************************************************************/
  30. void main()
  31. {
  32.         //啟動定時器
  33.         TMOD |= 0x01; //選擇定時器的工作方式(00表示13位定時計數器,01表示16位定時計數器,10表示8位定時計數器,11停止工作)
  34.         TH0 = 0xDC; //裝載定時器初值高八位(此初值表示定時器定時為10ms)
  35.         TL0 = 0x00; //裝載定時器初值低八位(此初值表示定時器定時為10ms)

  36.         EA = 1;         //開啟總中斷
  37.         ET0 = 1; //開啟定時器中斷允許位
  38.         TR0 = 1; //開啟定時器中斷

  39.         //時鐘顯示
  40.         while(1)
  41.         {
  42.                 data_deal();//調用數據處理函數,提取處理后的數據
  43.                 display(); //調用顯示函數,顯示處理好的數據
  44.         }
  45. }
  46. /*********************************************************************************************************************
  47. 函數名稱:delay(uchar timer)
  48. 函數功能:延時
  49. **********************************************************************************************************************/
  50. void delay(uchar timer)
  51. {
  52.         uchar i,j;
  53.         for(i=0;i<114;i++)
  54.         for(j=0;j<timer;j++)
  55.         ;
  56. }

  57. /*********************************************************************************************************************
  58. 函數名稱:T1IN_time()
  59. 函數功能:利用定時器中斷開啟定時,并計算出1秒鐘
  60. **********************************************************************************************************************/
  61. void T1IN_time() interrupt 1 //(1表示中斷號,0表示外部中斷0,1表示定時器T0,2表示外部中斷1,3表示定時器T1)
  62. {
  63.          uchar count;//申明定時器變量
  64.          TH0 = 0xDC; //裝載定時器初值高八位(此初值表示定時器定時為10ms)
  65.          TL0 = 0x00; //裝載定時器初值低八位(此初值表示定時器定時為10ms)

  66.          count ++; //定時器變量自加1
  67.          if(count == 100) //count自加100次,定時器運行100次初值的時間,即10ms *100 = 1s(1秒鐘)
  68.          {
  69.                  count = 0; //count歸零,等待下一次定時
  70.                 time_flag = 1; //定時器標志位為1,啟動時鐘時分秒循環程序
  71.          }
  72. }
  73. /*********************************************************************************************************************
  74. 函數名稱:H_M_S_circle()
  75. 函數功能:時分秒循環
  76. *************************************************************************************/
  77. void   H_M_S_circle()
  78. {
  79.         if(time_flag == 1)//當定時器標志位為1時,表示時間為1秒
  80.         {
  81.                 time_flag = 0;//標志位歸零
  82.                 second++;          //秒鐘自加1
  83.         }
  84.         if(second == 60) //當秒鐘自加1到60時
  85.         {
  86.                 second = 0; //秒鐘歸零
  87.                 Min ++;                //分鐘自加1
  88.         }
  89.         if(Min == 60) //當分鐘自加1到60時
  90.         {
  91.                 Min = 0; //分鐘歸零
  92.                 Hour ++; //小時自加1
  93.         }
  94.         if(Hour == 24) //當小時自加1到24時
  95.         {
  96.                 Hour = 0; //小時歸零
  97.                 Min = 0;  //分鐘歸零
  98.                 second = 0; //秒鐘歸零
  99.         }        
  100. }
  101. /********************************************************************************
  102. 函數名稱:data_deal()
  103. 函數功能:對數碼管將要顯示的數據進行拆分
  104. **********************************************************************************/
  105. void data_deal()
  106. {
  107.          H_M_S_circle(); //調用時鐘時分秒循環程序,取出時,分。秒的值
  108.          DispBuf[7] = Hour /10; //小時十位
  109.          DispBuf[6] = Hour %10; //小時個位
  110.          DispBuf[5] = 8; //顯示“-”
  111.          DispBuf[4] = Min /10; //分鐘十位
  112.          DispBuf[3] = Min %10; //分鐘個位
  113.          DispBuf[2] = 8; //顯示“-”
  114.          DispBuf[1] = second /10; //秒鐘十位
  115.          DispBuf[0] = second %10; //秒鐘個位
  116. }

  117. void display()
  118. {
  119.         uchar i;
  120.         code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


  121.         for(i=0;i<8;i++)
  122.         {
  123.                 P0 =com[i]; //i=0表示數碼管的最低位
  124.                 P2        =table[DispBuf[i]];//DispBuf[i]表示拆分后的數據,i表示需要顯示的動態數據
  125.                 delay(1);
  126.         }        P0 = 0x00; //關閉所有數碼管顯示
  127. }
  128. /***************************************END********************************************/
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:275826 發表于 2020-3-24 15:36 | 只看該作者
DispBuf[2] = 8; //顯示“-” 怎么會是顯示“-”,肯定顯示“8”
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表