導航:首頁 > 操作系統 > 單片機手錶

單片機手錶

發布時間:2023-02-09 10:51:57

⑴ 求一個簡單的單片機時鍾程序

#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsignedcharsec=0,min=0,hour=0,scanled;
unsignedcharkey,time;
unsignedchardisdat[6];
sbitK=P1^0;
voiddischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
voidt0isr()interrupt1 //秒計時
{
TR0=0;
TH0=0x3c;
TL0=0xb0;
TR0=1;
time++;
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
dischg();
}
voidt1isr()interrupt3 //顯示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x02;
P0=~ledtab[disdat[4]]&0x7f;
break;
case2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x08;
P0=~ledtab[disdat[2]]&0x7f;
break;
case4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=0;
min=0;
hour=0;
scanled=0;
time=0;
key=0;
dischg();
while(1)
{
if(K==0)
{
while(K==0);
key++;
key%=2;
}
switch(key)
{
case0:
TR0=1;
break;
case1:
TR0=0;
break;
}
}
}

⑵ 單片機電子表程序

匯編如下:
S_SET BIT P3.4 ;秒增加1按鈕位
M_SET BIT P3.5 ;分增加1按鈕位
H_SET BIT P3.7 ;小時增加1按鈕位
SECOND EQU 30H ;秒計數值變數
MINUTE EQU 31H ;分計數值變數
HOUR EQU 32H ;小時計數值變數
TCNT EQU 34H ; 1秒定時計數器

ORG 00H ;起始地址
JMP START
ORG 0BH ;Timer0中斷向量地址
JMP INT_T0

START:
MOV DPTR,#TABLE ;裝七段數碼管段碼數據表TABLE
MOV HOUR,#0 ;計數值全部清0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
MOV TMOD,#01H ;Timer 0作定時器,模式1
MOV TH0,#(65536-50000)/256 ;定時50毫秒
MOV TL0,#(65536-50000)MOD 256
MOV IE,#82H ;中斷使能
SETB TR0 ;啟動Timer 0

;以下是判斷秒、分、小時增加1按鈕是否被按下
A1:
CALL DISPLAY
JNB S_SET,S1 ;判斷秒按鈕
JNB M_SET,S2 ;判斷分按鈕
JNB H_SET,S3 ;判斷小時按鈕
JMP A1 ;循環檢測

S1:
CALL DELAY ;去抖動
JB S_SET,A1
INC SECOND ;秒位計數值加1
MOV A,SECOND ;A=SECOND
CJNE A,#60,J0 ;判斷是否到60秒
MOV SECOND,#0 ;如果到了就清0秒位計數值
JMP K1 ;跳到K1段

S2:
CALL DELAY
JB M_SET,A1

K1:
INC MINUTE ;分位計數值加1
MOV A,MINUTE ;A=MINUTE
CJNE A,#60,J1 ;判斷是否到60分
MOV MINUTE,#0 ;如果到了就清0分位計數值
JMP K2

S3:
CALL DELAY
JB H_SET,A1

K2:
INC HOUR ;小時計數值加1
MOV A,HOUR ;A=HOUR
CJNE A,#24,J2 ;判斷是否到24小時
MOV HOUR,#0 ;如果到了就清0秒、分、小時位計數值
MOV MINUTE,#0
MOV SECOND,#0
JMP A1

;以下程序等待秒、分、小時按鈕放開
J0:
JB S_SET,A1
CALL DISPLAY
JMP J0

J1:
JB M_SET,A1
CALL DISPLAY
JMP J1

J2:
JB H_SET,A1
CALL DISPLAY
JMP J2

;Timer0中斷服務子程序, 進行秒、分、小時的計時
INT_T0:
MOV TH0,#(65536-50000)/256 ;裝計數初始值
MOV TL0,#(65536-50000)MOD 256
INC TCNT ;1秒計數器增加1
MOV A,TCNT ;A=TCNT
CJNE A,#20,RETUNE ;計時1秒
INC SECOND ;秒計數器增加1
MOV TCNT,#0 ;清零TCNT
MOV A,SECOND ;A=SECOND
CJNE A,#60,RETUNE ;計時60秒
INC MINUTE ;分計數器增加1
MOV SECOND,#0 ;清零秒
MOV A,MINUTE ;A=MINUTE
CJNE A,#60,RETUNE ;計時60分
INC HOUR ;小時計數器增加1
MOV MINUTE,#0 ;清零分
MOV A,HOUR ;A=HOUR
CJNE A,#24,RETUNE ;計時24小時
MOV HOUR,#0 ;秒、分、小時計數值清0
MOV MINUTE,#0
MOV SECOND,#0
MOV TCNT,#0
RETUNE:
RETI ; 中斷服務子程序結束

;以下為七段數碼管顯示的子程序
DISPLAY:
MOV A,SECOND ;A=SECOND,顯示秒
MOV B,#10 ;B=10
DIV AB ;A除以B
MOV P2,#00100000B ;使能秒的十位
MOVC A,@A+DPTR ;七段數碼管段碼數據裝入A
MOV P0,A ;從P0口輸出
CALL DELAY
ORL P2,#0FFH ;熄滅七段數碼管

MOV A,B ;A=B
MOV P2,#00000000B ;使能秒的個位
MOVC A,@A+DPTR ;七段數碼管段碼數據裝入A
MOV P0,A ;從P0口輸出
CALL DELAY
ORL P2,#0FFH ;熄滅七段數碼管

MOV A,MINUTE ;A=MINUTE,顯示分
MOV B,#10 ;B=10
DIV AB ;A除以B
MOV P2,#01100000B ;使能分的十位
MOVC A,@A+DPTR ;七段數碼管段碼數據裝入A
MOV P0,A ;從P0口輸出
CALL DELAY
ORL P2,#0FFH ;熄滅七段數碼管

MOV A,B ;A=B
MOV P2,#01000000B ;使能分的個位
MOVC A,@A+DPTR ;七段數碼管段碼數據裝入A
MOV P0,A ;從P0口輸出
CALL DELAY
ORL P2,#0FFH ;熄滅七段數碼管

MOV A,HOUR ;A=HOUR,顯示小時
MOV B,#10 ;B=10
DIV AB ;A除以B
MOV P2,#10100000B ;使能小時的十位
MOVC A,@A+DPTR ;七段數碼管段碼數據裝入A
MOV P0,A ;從P0口輸出
CALL DELAY
ORL P2,#0FFH ;熄滅七段數碼管

MOV A,B ;A=B
MOV P2,#10000000B ;使能小時的個位
MOVC A,@A+DPTR ;七段數碼管段碼數據裝入A
MOV P0,A ;從P0口輸出
CALL DELAY
ORL P2,#0FFH ;熄滅七段數碼管
RET

TABLE: ;七段數碼管顯示碼表
DB 40H,79H,24H,30H,19H
DB 12H,02H,78H,00H,10H

DELAY: ;延時子程序
MOV R6,#2
D1:
MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET

END

⑶ 電子表內有單片機嗎

電子表內沒有單片機,他的組成一般是:

1、水晶振盪器,32768Hz

2、專用驅動電路晶元

3、驅動馬達

4、齒輪系統,時分秒的轉動
等組成

⑷ 電子表用的單片機

這個叫掩膜集成電路。功能設計完成後讓晶元生產廠家直接把晶元做在PCB板上的。

⑸ 為什麼電子手錶沒有單片機卻可以顯示數碼管

電子手錶是用液晶屏顯示的。
其實,電子表電路就是數字電路的計數器,加上液晶顯示驅動晶元就夠了。
而且晶元通常是軟體封裝的,就是直接封裝在PCB板上了。

⑹ 目的: 仿電子手錶功能的單片機時鍾

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit la=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
sbit rd=P3^7;
uchar count,s1num;
char miao,shi,fen;
uchar code table[]=" 2009-12-20 MON";
uchar code table1[]=" 00:00:00";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void write_com(uchar com)
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void write_date(uchar date)
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}

void init()
{
uchar num;
la=0;
wela=0;
lcden=0;
// fen=59;
// miao=53;
// shi=23;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}

void keyscan()
{
rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{ s1num++;
while(!s1);
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
if(s1num==2)
{
write_com(0x80+0x40+7);
}
if(s1num==3)
{
write_com(0x80+0x40+4);
}
if(s1num==4)
{
s1num=0;
write_com(0x0c);
TR0=1;
}

}
if(s1num!=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);

}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
if(s1num==1)
{
/* if(miao==0)
{
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}*/
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=23;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();

}
// while(1);
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);

}
}

⑺ 單片機的具體應用例子

1、節能控制:

單片機可以控制能耗的節奏,例如:收集睡眠和運動步數等數字,以分鍾級的頻率進行上報;信息未上報時,設備處於低能耗的狀態,信息上報時,會出現一些網路傳輸方面的消耗,單片機可以控制能耗的節奏,將大部分時間控制在低能耗的狀態下,可以使得待機時間長達七十二小時以上。

2、智能語音設備:

例如:在導航智能電子設備中,可以將其中的一些道路名稱、距離等進行提取,然後進行播報;同時,還可以選擇不同的名人口吻進行播報,真正實現智能化的定製操作,更好地滿足用戶的需求;

3、報警控制:

例如:家裡經常使用的火災報警器,就是在外界環境達到一定條件下開啟智能報警的設備,如果室內的煙霧濃度到達某種水平,或者是收集外界的數據達到某種狀態時,就會自動觸發報警設置,從而實現智能報警的功能。

4、工廠生產檢測:

例如:在一些工廠中,經常會安裝一些設備,對工廠的生產環境進行監控,當出現某些異常數據時,就會發生報警,為確保設備的正常運作,設備維護人員需要及時進行處理,避免產生較大的故障。

5、家電領域:

其中家用電器就是其應用中的一個領域,用單片機取代傳統的家用電器中機械控制部件,並實現家電智能化。由此確定了單片機在家用電器中的重要地位。如:智能電飯煲、智能洗衣機、智能電視等都有單片機的應用。

⑻ 電子手錶冷光燈亮幾秒後自動熄滅利用的是什麼原理

電子表內部為照明迴路設計了單穩態電路,觸發按鈕令電路開燈是一種暫態,延時幾秒之後進入滅燈的穩態狀態。

閱讀全文

與單片機手錶相關的資料

熱點內容
編譯原理短語可以是句子嗎 瀏覽:652
電腦版燈塔app怎麼下載 瀏覽:554
我的魂斗羅歸來怎麼安卓轉蘋果 瀏覽:150
iphone怎麼隱藏app內容 瀏覽:954
移動手機怎麼修改登錄密碼app 瀏覽:582
兩點間中點垂直線cad命令 瀏覽:32
dpdk編程開發 瀏覽:978
linux編輯文件退出命令 瀏覽:883
好看的網站 瀏覽:764
class版本為過高無法反編譯 瀏覽:467
vivo手機怎麼刪除app上的小鎖 瀏覽:462
泰國《永恆》未刪減 瀏覽:952
程序員小妹留學新加坡 瀏覽:459
app為什麼要做伺服器端app 瀏覽:608
華為電腦命令提示符在哪 瀏覽:80
法國啄木鳥網站入口 瀏覽:601
java的api怎麼打開 瀏覽:277
一本主角叫林楓的重生小說 瀏覽:809
超級靈魂解壓視頻 瀏覽:536
葉天明和柳韻 瀏覽:138