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

標題: TLC2543+51單片機的直流電壓表+時鐘+跑表仿真及程序 [打印本頁]

作者: pengy    時間: 2017-8-3 17:49
標題: TLC2543+51單片機的直流電壓表+時鐘+跑表仿真及程序
可單鍵實現三種功能的切換:
1、       電子時鐘:
          初始顯示時間為23-59-55,正常走時,2個按鍵調整時、分 功能,
          按鍵1選擇的調整內容以閃爍表示,按鍵2具備長按連續加1功能。
          操作過程中顯示穩定,單次按鍵調整不出現數字跳變情形(防抖)。
          后臺走時:切換至其他功能,仍能后臺正確走時。
2、       跑表
                           顯示格式為000.0,計時單位為0.1秒,范圍為0.1秒~999.9秒
                          后臺計時:計時中的跑表,切換至其他功能,后臺計時繼續。
                          單鍵實現啟動、停止、清零功能
3、       簡易直流電壓表:
          直流電壓由信號源或直流源給出,范圍0.2v~2.5v;
                           按鍵校準:測量儀器給出標準1v電壓,可用按鍵校準自身顯示;
                           自動穩定顯示直流電壓;1.1v~2.5v范圍內任測1個電壓值,誤差<2%;
                            0.2~1v范圍內,任測1電壓值,誤差<1%,且顯示基本穩定。
芯片:TLC2543、lcd1602、51
內含:protues仿真電路

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



單片機源程序如下:
  1. #include<reg51.h>
  2. #include "lcd.h"
  3. #include "TLC2543.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define d0 0x80
  7. #define d1 0xc0
  8. sbit s1=P1^0;                 //按鍵1:進入時鐘設置,再按進入秒表界面,再按進入電壓表界面
  9. sbit s5=P1^4;                 //時鐘下:時分秒的選擇(第四次確認設置);秒表下:啟動、停止、清零
  10. sbit s6=P1^5;                 //時鐘下:加1,長按停頓后連續加1
  11. uchar count=0,count1=0,s=23,f=59,m=55;
  12. uchar ss1=0,t0,t1,n=0;
  13. uchar code tab2[]="  000.0";
  14. uchar code tab3[]="  0.000";
  15. float p=0;
  16. void delay(uint c);
  17. void button0();
  18. void button1();
  19. void button2();
  20. void main()
  21. {
  22.         LcdInit();
  23.         while(1)
  24.         {
  25.         if(s1==0)
  26.         {
  27.                 delay(5);
  28.                 if(s1==0) {while(!s1);ss1++;button0();}
  29.         }
  30.         LcdWriteSg(d1,2,s);
  31.         LcdWriteSg(d1,5,f);
  32.         LcdWriteSg(d1,8,m);
  33.         }

  34. }






  35. //子函數        
  36. void delay(uint x)
  37. {
  38.         uint i;  
  39.         while(x--)
  40.            for(i=0;i<110;i++);
  41. }
  42. void button0()
  43. {       
  44.         LcdWriteCom(d1+6);
  45.         LcdWriteCom(0x0f); //開光標
  46.         while(1)
  47.         {
  48.                 if(ss1==0) return;
  49.                 if(s5==0)
  50.                 {
  51.                         delay(5);
  52.                         if(s5==0)
  53.                         {
  54.                                 while(!s5);
  55.                                 ss1++;
  56.                                 if(ss1==2)
  57.                                  {
  58.                                         LcdWriteCom(d1+3);          //在時鐘時個位光標閃爍
  59.                                  }
  60.                                 if(ss1==3)                                         
  61.                                  {
  62.                                         ss1=0;                           //取消設置
  63.                                         LcdWriteCom(0x0c);                //整體顯示開、光標關、光標不閃爍
  64.                                         return;
  65.                                  }
  66.                         }}
  67.                 if(ss1!=0)
  68.                         {
  69.                                 if(s6==0)
  70.                                 {
  71.                                         delay(5);
  72.                                         if(s6==0)
  73.                                         {       
  74.                                                 delay(850);
  75.                                                 if(s6)
  76.                                                 {
  77.                                                 if(ss1==1)
  78.                                                 {
  79.                                                         f++;
  80.                                                         if(f==60) f=0;
  81.                                                         LcdWriteSg(d1,5,f);
  82.                                                         LcdWriteCom(d1+6);
  83.                                                 }
  84.                                                 if(ss1==2)
  85.                                                 {
  86.                                                         s++;
  87.                                                         if(s==24) s=0;
  88.                                                         LcdWriteSg(d1,2,s);
  89.                                                         LcdWriteCom(d1+3);
  90.                                                 }
  91.                                                 }
  92.                                                 while(!s6){
  93.                                                 if(ss1==1)
  94.                                                 {
  95.                                                         f++;
  96.                                                         if(f==60) f=0;
  97.                                                         LcdWriteSg(d1,5,f);
  98.                                                         LcdWriteCom(d1+6);
  99.                                                 }
  100.                                                 if(ss1==2)
  101.                                                 {
  102.                                                         s++;
  103.                                                         if(s==24) s=0;
  104.                                                         LcdWriteSg(d1,2,s);
  105.                                                         LcdWriteCom(d1+3);
  106.                                                 }
  107.                                                 delay(100);
  108.                                                 }
  109.                                      }
  110.                                 }
  111.                         }
  112.                 if(s1==0)
  113.                 {
  114.                         delay(5);
  115.                         if(s1==0){while(!s1);ss1=0;button1();}
  116.                 }
  117.         }
  118. }
  119. void button1()
  120. {
  121.         uchar i;
  122.         LcdWriteCom(0x0c);
  123.         LcdWriteCom(0x01);
  124.         LcdWriteCom(0x80);
  125.         for(i=0;i<7;i++)
  126.     {
  127.                  LcdWriteData(tab2[i]);
  128.                    delay(5);
  129.         }       
  130.         while(1){
  131.         if(s5==0 && n==0)
  132.         {
  133.                 delay(5);
  134.                 if(s5==0)
  135.                 {
  136.                         n++;
  137.                         while(!s5);
  138.                         TMOD=TMOD|0x10;//定時器1        每50000*1us=0.05s溢出一次            
  139.                         TH1=0x3c;
  140.                         TL1=0xd0;
  141.                         EA=1;                                //開總中斷
  142.                         ET1=1;                                //開定時器1中斷
  143.                         TR1=1;                                //開定時器
  144.                 }
  145.         }
  146.         if(s5==0 && n==1)
  147.         {
  148.                 delay(5);
  149.                 if(s5==0)
  150.                 {
  151.                         while(!s5);
  152.                         n++;
  153.                         TR1=0;
  154.                 }
  155.         }
  156.         if(s5==0 && n==2)
  157.         {
  158.                 if(s5==0)
  159.                 {
  160.                         while(!s5);
  161.                         n=0;
  162.                         t0=0;
  163.                         t1=0;
  164.                 }
  165.         }
  166.         LcdWriteSg(d0,2,t1);
  167.         LcdWriteSg1(d0,4,t0);
  168.         if(s1==0)
  169.         {
  170.                 delay(5);
  171.                 if(s1==0) {while(!s1);button2();return;}
  172.         }
  173.   }
  174. }

  175. void button2()
  176. {
  177.         uchar i,a[5];
  178.         uint dat;
  179.         float s;
  180.            LcdWriteCom(0x01);
  181.            LcdWriteCom(0x80);          
  182.        
  183.        
  184.         for(i=0;i<7;i++)
  185.     {
  186.                  LcdWriteData(tab3[i]);
  187.                    delay(5);
  188.         }

  189.         while(1){
  190.         dat=Read_AD_Data(0);
  191.         s=(float)5*dat/4096;

  192.         if(s5==0)
  193.         {
  194.                 delay(5);
  195.                 if(s5==0)
  196.                 {
  197.                         p=s-1;
  198.                 }       
  199.         }
  200.         s=s-p;
  201.         a[3]=(int)s*1;
  202.         a[2]=((int)(s*10))%10;
  203.         a[1]=((int)(s*100))%10;
  204.         a[0]=((int)(s*1000))%10;
  205.         a[4]=((int)(s*10000))%10;

  206.         if(a[4]>5)
  207.         {
  208.                 if(a[0]==9)
  209.                 {       
  210.                         a[0]=0;       
  211.                         if(a[1]==9)
  212.                         {
  213.                                 a[1]=0;
  214.                                 if(a[2]==9)
  215.                                 {
  216.                                         a[2]=0;
  217.                                         a[3]++;
  218.                                 }
  219.                                 else a[2]++;
  220.                         }
  221.                         else a[1]++;
  222.                 }
  223.                 else a[0]++;
  224.         }

  225.         LcdWriteCom(0x80+0x02);       
  226.         LcdWriteData(0x30+a[3]);
  227.         LcdWriteCom(0x80+0x04);       
  228.         LcdWriteData(0x30+a[2]);
  229.         LcdWriteCom(0x80+0x05);       
  230.         LcdWriteData(0x30+a[1]);
  231.         LcdWriteCom(0x80+0x06);       
  232.         LcdWriteData(0x30+a[0]);
  233.         if(s1==0)
  234.         {
  235.                 delay(5);
  236.                 if(s1==0){while(!s1);LcdInit();return;}
  237.         }
  238.         }       
  239. }


  240. void tim0() interrupt 1
  241. {
  242.     TH0=0x3c;
  243.         TL0=0xd0;
  244.         count++;
  245.         if(count==20)
  246.           {
  247.                    count=0;
  248.                  m++;
  249.                 if(m==60)
  250.                   {
  251.                           m=0;
  252.                         f++;
  253.                         if(f==60)
  254.                          {
  255.                            f=0;
  256.                            s++;
  257.                            if(s==24) s=0;
  258.                          }
  259.                   }
  260.           }
  261. }
  262. void tim1() interrupt 3
  263. {
  264.         TH1=0x3c;
  265.         TL1=0xd0;
  266.         count1++;
  267.         if(count1==2)
  268.         {               
  269.                 count1=0;
  270.                 t0++;
  271.                 if(t0==100)
  272.                 {
  273.                         t0=0;
  274.                         t1++;
  275.                 }
  276.                 if(t1==99 && t0==99)
  277.                 {
  278.                         TR1=0;                 //關中斷
  279.                 }
  280.         }
  281. }
復制代碼

所有資料51hei提供下載:
簡易時鐘 跑表 直流電壓表.rar (100.52 KB, 下載次數: 91)







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 黄片毛片在线观看 | 亚洲视频第一页 | 久久精品国产亚洲夜色av网站 | 亚洲国产网 | 国产伦一区二区三区 | 久草.com| 国产精品1区2区 | 久久一| 亚洲精品成人 | 久草中文网| 亚洲成人黄色 | 亚洲免费在线 | 亚洲欧美激情视频 | 狠狠干天天干 | 亚洲福利在线观看 | 国产精品亚洲一区二区三区在线 | 欧美成人一级 | 在线免费黄色 | 国产乱码精品一区二区三区忘忧草 | 人人爽日日躁夜夜躁尤物 | 91福利网| 国产精品无码专区在线观看 | 久久不卡区 | www.天堂av.com | 精品国产视频 | 午夜激情免费视频 | 青青久久久 | 日本福利视频免费观看 | 欧洲性生活视频 | 天天综合网7799精品 | 黄色网址在线免费播放 | 最新黄色毛片 | 中文字幕一区在线观看视频 | 国产一区免费视频 | 国产成人精品一区二区三区在线 | 亚洲视频 欧美视频 | 在线观看一区 | 成人一区av | 一区精品视频在线观看 | 视频二区在线观看 | 黄网站在线播放 |