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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

TLC2543+51單片機的直流電壓表+時鐘+跑表仿真及程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:224469 發(fā)表于 2017-8-3 17:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
可單鍵實現(xiàn)三種功能的切換:
1、       電子時鐘:
          初始顯示時間為23-59-55,正常走時,2個按鍵調(diào)整時、分 功能,
          按鍵1選擇的調(diào)整內(nèi)容以閃爍表示,按鍵2具備長按連續(xù)加1功能。
          操作過程中顯示穩(wěn)定,單次按鍵調(diào)整不出現(xiàn)數(shù)字跳變情形(防抖)。
          后臺走時:切換至其他功能,仍能后臺正確走時。
2、       跑表
                           顯示格式為000.0,計時單位為0.1秒,范圍為0.1秒~999.9秒
                          后臺計時:計時中的跑表,切換至其他功能,后臺計時繼續(xù)。
                          單鍵實現(xiàn)啟動、停止、清零功能
3、       簡易直流電壓表:
          直流電壓由信號源或直流源給出,范圍0.2v~2.5v;
                           按鍵校準:測量儀器給出標準1v電壓,可用按鍵校準自身顯示;
                           自動穩(wěn)定顯示直流電壓;1.1v~2.5v范圍內(nèi)任測1個電壓值,誤差<2%;
                            0.2~1v范圍內(nèi),任測1電壓值,誤差<1%,且顯示基本穩(wěn)定。
芯片:TLC2543、lcd1602、51
內(nèi)含: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,長按停頓后連續(xù)加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. //子函數(shù)        
  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, 下載次數(shù): 91)


評分

參與人數(shù) 2黑幣 +105 收起 理由
didi123 + 5 很給力!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩亚洲国产 | 污片在线免费观看 | 日韩欧美精品一区 | 国产成人精品久久二区二区91 | 一区二区在线免费观看 | 麻豆久久精品 | 成人av网站在线观看 | 亚洲综合无码一区二区 | 免费看的av | 亚洲视频在线播放 | 精品免费国产 | 欧美日韩在线视频一区 | 国产1区在线 | 色天天综合| 亚洲先锋影音 | 亚洲欧美日韩一区二区 | 日韩欧美第一页 | 精品乱码一区二区三四区视频 | 日韩理论电影在线观看 | 欧美日韩国产高清 | 免费黄色av网站 | 黄色片a级 | 国产a视频 | 免费啪啪| 亚洲国产成人av | 免费99视频 | 青青草在线视频免费观看 | 欧美激情 一区 | 国产免费一区二区三区最新6 | www.天天操| 精品久久国产 | 三级国产三级在线 | 日韩一区二区三区在线观看 | 欧美在线一区二区三区 | 久久国产精品久久 | 国产高清在线视频 | 久精品视频| 日韩和的一区二区 | 日韩欧美国产精品一区 | 北条麻妃国产九九九精品小说 | 黑人巨大精品欧美一区二区免费 |