標題: 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仿真工程文件可到本帖附件中下載)
QQ截圖20170803174900.png (32.99 KB, 下載次數: 59)
下載附件
2017-8-3 17:49 上傳
0.png (61.62 KB, 下載次數: 58)
下載附件
2017-8-3 22:14 上傳
單片機源程序如下:
- #include<reg51.h>
- #include "lcd.h"
- #include "TLC2543.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define d0 0x80
- #define d1 0xc0
- sbit s1=P1^0; //按鍵1:進入時鐘設置,再按進入秒表界面,再按進入電壓表界面
- sbit s5=P1^4; //時鐘下:時分秒的選擇(第四次確認設置);秒表下:啟動、停止、清零
- sbit s6=P1^5; //時鐘下:加1,長按停頓后連續加1
- uchar count=0,count1=0,s=23,f=59,m=55;
- uchar ss1=0,t0,t1,n=0;
- uchar code tab2[]=" 000.0";
- uchar code tab3[]=" 0.000";
- float p=0;
- void delay(uint c);
- void button0();
- void button1();
- void button2();
- void main()
- {
- LcdInit();
- while(1)
- {
- if(s1==0)
- {
- delay(5);
- if(s1==0) {while(!s1);ss1++;button0();}
- }
- LcdWriteSg(d1,2,s);
- LcdWriteSg(d1,5,f);
- LcdWriteSg(d1,8,m);
- }
- }
- //子函數
- void delay(uint x)
- {
- uint i;
- while(x--)
- for(i=0;i<110;i++);
- }
- void button0()
- {
- LcdWriteCom(d1+6);
- LcdWriteCom(0x0f); //開光標
- while(1)
- {
- if(ss1==0) return;
- if(s5==0)
- {
- delay(5);
- if(s5==0)
- {
- while(!s5);
- ss1++;
- if(ss1==2)
- {
- LcdWriteCom(d1+3); //在時鐘時個位光標閃爍
- }
- if(ss1==3)
- {
- ss1=0; //取消設置
- LcdWriteCom(0x0c); //整體顯示開、光標關、光標不閃爍
- return;
- }
- }}
- if(ss1!=0)
- {
- if(s6==0)
- {
- delay(5);
- if(s6==0)
- {
- delay(850);
- if(s6)
- {
- if(ss1==1)
- {
- f++;
- if(f==60) f=0;
- LcdWriteSg(d1,5,f);
- LcdWriteCom(d1+6);
- }
- if(ss1==2)
- {
- s++;
- if(s==24) s=0;
- LcdWriteSg(d1,2,s);
- LcdWriteCom(d1+3);
- }
- }
- while(!s6){
- if(ss1==1)
- {
- f++;
- if(f==60) f=0;
- LcdWriteSg(d1,5,f);
- LcdWriteCom(d1+6);
- }
- if(ss1==2)
- {
- s++;
- if(s==24) s=0;
- LcdWriteSg(d1,2,s);
- LcdWriteCom(d1+3);
- }
- delay(100);
- }
- }
- }
- }
- if(s1==0)
- {
- delay(5);
- if(s1==0){while(!s1);ss1=0;button1();}
- }
- }
- }
- void button1()
- {
- uchar i;
- LcdWriteCom(0x0c);
- LcdWriteCom(0x01);
- LcdWriteCom(0x80);
- for(i=0;i<7;i++)
- {
- LcdWriteData(tab2[i]);
- delay(5);
- }
- while(1){
- if(s5==0 && n==0)
- {
- delay(5);
- if(s5==0)
- {
- n++;
- while(!s5);
- TMOD=TMOD|0x10;//定時器1 每50000*1us=0.05s溢出一次
- TH1=0x3c;
- TL1=0xd0;
- EA=1; //開總中斷
- ET1=1; //開定時器1中斷
- TR1=1; //開定時器
- }
- }
- if(s5==0 && n==1)
- {
- delay(5);
- if(s5==0)
- {
- while(!s5);
- n++;
- TR1=0;
- }
- }
- if(s5==0 && n==2)
- {
- if(s5==0)
- {
- while(!s5);
- n=0;
- t0=0;
- t1=0;
- }
- }
- LcdWriteSg(d0,2,t1);
- LcdWriteSg1(d0,4,t0);
- if(s1==0)
- {
- delay(5);
- if(s1==0) {while(!s1);button2();return;}
- }
- }
- }
- void button2()
- {
- uchar i,a[5];
- uint dat;
- float s;
- LcdWriteCom(0x01);
- LcdWriteCom(0x80);
-
-
- for(i=0;i<7;i++)
- {
- LcdWriteData(tab3[i]);
- delay(5);
- }
- while(1){
- dat=Read_AD_Data(0);
- s=(float)5*dat/4096;
- if(s5==0)
- {
- delay(5);
- if(s5==0)
- {
- p=s-1;
- }
- }
- s=s-p;
- a[3]=(int)s*1;
- a[2]=((int)(s*10))%10;
- a[1]=((int)(s*100))%10;
- a[0]=((int)(s*1000))%10;
- a[4]=((int)(s*10000))%10;
- if(a[4]>5)
- {
- if(a[0]==9)
- {
- a[0]=0;
- if(a[1]==9)
- {
- a[1]=0;
- if(a[2]==9)
- {
- a[2]=0;
- a[3]++;
- }
- else a[2]++;
- }
- else a[1]++;
- }
- else a[0]++;
- }
- LcdWriteCom(0x80+0x02);
- LcdWriteData(0x30+a[3]);
- LcdWriteCom(0x80+0x04);
- LcdWriteData(0x30+a[2]);
- LcdWriteCom(0x80+0x05);
- LcdWriteData(0x30+a[1]);
- LcdWriteCom(0x80+0x06);
- LcdWriteData(0x30+a[0]);
- if(s1==0)
- {
- delay(5);
- if(s1==0){while(!s1);LcdInit();return;}
- }
- }
- }
- void tim0() interrupt 1
- {
- TH0=0x3c;
- TL0=0xd0;
- count++;
- if(count==20)
- {
- count=0;
- m++;
- if(m==60)
- {
- m=0;
- f++;
- if(f==60)
- {
- f=0;
- s++;
- if(s==24) s=0;
- }
- }
- }
- }
- void tim1() interrupt 3
- {
- TH1=0x3c;
- TL1=0xd0;
- count1++;
- if(count1==2)
- {
- count1=0;
- t0++;
- if(t0==100)
- {
- t0=0;
- t1++;
- }
- if(t1==99 && t0==99)
- {
- TR1=0; //關中斷
- }
- }
- }
復制代碼
所有資料51hei提供下載:
簡易時鐘 跑表 直流電壓表.rar
(100.52 KB, 下載次數: 91)
2017-8-3 17:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
黄片毛片在线观看
|
亚洲视频第一页
|
久久精品国产亚洲夜色av网站
|
亚洲国产网
|
国产伦一区二区三区
|
久草.com|
国产精品1区2区
|
久久一|
亚洲精品成人
|
久草中文网|
亚洲成人黄色
|
亚洲免费在线
|
亚洲欧美激情视频
|
狠狠干天天干
|
亚洲福利在线观看
|
国产精品亚洲一区二区三区在线
|
欧美成人一级
|
在线免费黄色
|
国产乱码精品一区二区三区忘忧草
|
人人爽日日躁夜夜躁尤物
|
91福利网|
国产精品无码专区在线观看
|
久久不卡区
|
www.天堂av.com
|
精品国产视频
|
午夜激情免费视频
|
青青久久久
|
日本福利视频免费观看
|
欧洲性生活视频
|
天天综合网7799精品
|
黄色网址在线免费播放
|
最新黄色毛片
|
中文字幕一区在线观看视频
|
国产一区免费视频
|
国产成人精品一区二区三区在线
|
亚洲视频 欧美视频
|
在线观看一区
|
成人一区av
|
一区精品视频在线观看
|
视频二区在线观看
|
黄网站在线播放
|