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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口時鐘仿真+程序設計 附虛擬串口軟件下載

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

本次設計要求設計一基于單片機控制的串行口調時時鐘設計計,該數字鐘能同時顯小時,分鐘和秒。并能對時鐘進行設置。時鐘開始顯示為00時 00分,也就是數碼管(或用液晶塊)顯示 00.00。秒信號用時的個位的小數點表示,秒信號(即小數點)在每秒鐘的前半秒點亮,后半秒鐘熄滅,秒信號每閃爍 60 次時“分”的計數加 1,秒計數變為 0。分計數加到 59分后,分鐘再加 1,分計數變為 0,時計數加 1。依次類推,時鐘最大的顯示值為 23 小時 59分。只要確定了1秒的定時時間,其他位均以此為基準往上累加。   


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #define INT8U  unsigned char
  5. #define INT16U unsigned int
  6. #define FREQ         11059200        //振蕩器頻率11.0592MHz

  7. sbit K1=P1^7;
  8. sbit K2=P1^0;

  9.                                               //0   1    2    3   4    5    6    7    8    9   
  10. INT8U code SEG_CODE[] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF,0X86,0xDB,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00 };
  11. INT8U R[] = {0,0,0,0,0,0};        
  12. INT8U S=0,F=0,M=0,k=0,flag=0,L=1;
  13. INT16U cnt=0,Judge=0;

  14. //-----------------------------------------------------------------
  15. // 延時程序
  16. //-----------------------------------------------------------------
  17. void delay_ms(INT16U x)
  18. {
  19.         INT8U t;   
  20.         while(x--)
  21.         for(t = 0; t<120; t++);
  22. }

  23. void Init_USART_uT1()
  24. {
  25.           TMOD=0x21;
  26.           SCON=0X50;                        
  27.         PCON=0x00;
  28.         TH0=(65536-50000)/256;
  29.         TL0=(65536-50000)%256;
  30.         TH1=TL1=0xfd;
  31.         TR1=1;
  32. }
  33. void Send()
  34. {
  35. INT8U *s="請依次輸入時分秒。!\r\n";
  36.   INT8U i=0;
  37.   while(s[i]!='\0')
  38.   {
  39.     SBUF=s[i++];
  40.         while(TI==0);
  41.         TI=0;
  42.   }
  43. }
  44. void Display()
  45. {
  46.         P2=0XFE;P0=SEG_CODE[S/10];delay_ms(1);
  47.         P2=0XFD;P0=SEG_CODE[S%10+10]; delay_ms(1);
  48.         P2=0XFB;P0=SEG_CODE[F/10];delay_ms(1);
  49.         if(M%2){P2=0XF7;P0=SEG_CODE[F%10+10];}
  50.         else   {P2=0XF7;P0=SEG_CODE[F%10];}delay_ms(1);           

  51. }
  52. void keyscan()
  53. {
  54.    if(K1==0)
  55.    {
  56.       delay_ms(5);
  57.           if(K1==0)
  58.           {
  59.             flag=1;        
  60.                  while(!K1);
  61.           }
  62.    }
  63.    if(K2==0)
  64.    {
  65.       delay_ms(5);
  66.           if(K2==0)
  67.           {
  68.              flag=2;               
  69.                  while(!K2);
  70.           }
  71.    }
  72. }
  73. //-----------------------------------------------------------------
  74. // 主程序
  75. //-----------------------------------------------------------------
  76. void main()
  77. {
  78.    EA=1;
  79.    EX0=1;
  80.    IT0=1;
  81.    ET0=1;
  82.    TR0=1;
  83.    ES=1;  
  84.    Init_USART_uT1();
  85.    Send();
  86.    while(1)
  87.    {
  88.          keyscan();
  89.          Display();
  90.          if(flag==2)
  91.          {
  92.            TR0=0;
  93.          }
  94.          if(flag==1)
  95.          {
  96.                 TR0=1;
  97.          }


  98.    }
  99. }
  100. //-----------------------------------------------------------------
  101. // 串口接收中斷
  102. //-----------------------------------------------------------------
  103. void receive_4_digit() interrupt 4
  104. {
  105.          static  INT8U i=0;
  106.          INT8U c;
  107.          if(RI)
  108.          {
  109.             RI=0;
  110.                 flag=2;
  111.                 c=SBUF;
  112.                 if(c=='#')i=0;
  113.                 else if(c>='0'&&c<='9')
  114.                 {
  115.                    R[i++]=c-'0';           
  116.                    S=R[0]*10+R[1];
  117.                    F=R[2]*10+R[3];
  118.                    M=R[4]*10+R[5];
  119.                    if(i==6)i=0;
  120.                 }
  121.          }
  122. }
  123. void Time0()interrupt 1
  124. {
  125.         TH0=(65536-50000)/256;
  126.         TL0=(65536-50000)%256;
  127.         ++cnt;        
  128.         if(cnt==20)
  129.         {
  130.           cnt=0;
  131.           Judge++;
  132.           if(Judge==10&&L==1)
  133.           {
  134.                     flag=1;
  135.                  L=2;
  136.           }
  137.          
  138.           if(flag==1)
  139. ……………………

  140. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:附虛擬串口軟件
串口通訊.zip (7.81 MB, 下載次數: 70)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:328014 發表于 2019-4-17 02:05 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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