导航:首页 > 操作系统 > 单片机手表

单片机手表

发布时间: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、家电领域:

其中家用电器就是其应用中的一个领域,用单片机取代传统的家用电器中机械控制部件,并实现家电智能化。由此确定了单片机在家用电器中的重要地位。如:智能电饭煲、智能洗衣机、智能电视等都有单片机的应用。

⑻ 电子手表冷光灯亮几秒后自动熄灭利用的是什么原理

电子表内部为照明回路设计了单稳态电路,触发按钮令电路开灯是一种暂态,延时几秒之后进入灭灯的稳态状态。

阅读全文

与单片机手表相关的资料

热点内容
怀孕神片 浏览:815
8排影院哪个位置好 浏览:906
程序员对链底端的影响 浏览:470
html5socketphp 浏览:86
excel怎样编程 浏览:977
php正则不匹配 浏览:138
垃圾桶怎么连接服务器 浏览:665
21号染色体值算法公式 浏览:248
传入传出的linux命令 浏览:535
罂粟电影剧情 浏览:840
龙口设计图纸加密联系方式 浏览:141
怎么看加密狗是否到期 浏览:239
楚雄用什么app做公交划算 浏览:751
加密货币小韭菜 浏览:176
韩剧新建文件夹1的主要演员 浏览:378
三k线洗盘源码大全 浏览:705
68天48天 浏览:170
色宅男午夜电影网 浏览:619
安卓数据线接口颜色代表什么 浏览:152
一门两个加密锁 浏览:918