导航:首页 > 操作系统 > 简易时钟单片机

简易时钟单片机

发布时间:2023-09-09 04:50:14

⑴ 用单片机设计一个时钟,可显示时和分,可以调时间,也要有闹钟功能,要有设计的电路图

其实不用定时中断也能实现功能:
#include<reg51.h> 主函数
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};定义0-9数组
unsigned int tmp;定义变量
void delay(unsigned int xms)定义延时函数
{unsigned int j,i;
for(i=0;i<xms;i++)
for(j=0;j<100;j++);
}
void disp()定义子函数
{
P1=tmp;
delay(1);
P2=0xff;
tmp=tmp<<1;
}
void main( )
{

unsigned char z,s=00,m=00,h=00;给时钟初始值
while(1)
{
for(z=0;z<100;z++)
{
tmp=0x01;
P2=tab[h/10];小时显示

disp();
P2=tab[h%10];

disp();
P2=tab[m/10];分钟显示

disp();
P2=tab[m%10];

disp();
P2=tab[s/10];秒显示

disp();
P2=tab[s%10];

disp();

}
s++;
while(s==60)秒进一位,到60清0
{
m++;
s=00;
}
while(m==60)分钟进一位,到60清0

{
h++;
m=00;
}
while(h==24)小时进一位,到24清0
{
h=00;
}

}

}

⑵ 如何用51单片机制作简易电子钟

我自己做的一个课程设计,程序运行已经成功了:

编程序如下:

ORG0000H

AJMPmain

ORG000BH;定时器0的中断向量地址

AJMPTIME0;跳转到真正的定时器程序处

ORG30H

main:

movdptr,#k1;

start:

MOVP0,#00H;中断预处理程序

MOVP1,#00H

MOVP3,#00H;关所有灯

MOVR0,#00H;软件计数器预清0

MOVR7,#00H

MOVR6,#00H

MOVTMOD,#00000001B;定时/计数器0工作于方式1

MOVTH0,#3CH

MOVTL0,#0B0H;即数15536

SETBEA;开总中断允许

SETBET0;开定时/计数器0允许

SETBTR0;定时/计数器0开始运行

LOOP:;判断时钟进位程序

MOVA,R1

CJNEA,#60,LOOP1;R1等于60吗?

MOVR1,#0

INCR2;R1等于60那么R2加一,R1清0

MOVA,R2

CJNEA,#60,LOOP1;R2等于60吗?

MOVR2,#0

INCR3;R2等于60那么R3加一,R2清0

MOVA,R3

CJNEA,#24,LOOP1;R3等于24吗?

MOVR3,#0

;R3等于24那么R3清0

LOOP1:

mova,r2;如果分钟显示为0,报警

cjnea,#01H,LOOP2

mova,r1

cjnea,#00H,LOOP3

clrp2.0

LOOP3:

mova,r1;如果秒钟显示为1,取消报警

cjnea,#05H,LOOP2

setbp2.0

LOOP2:;显示数据处理

MOVA,R1;取来8位二进制数

MOVB,#100

DIVAB;除以100

MOVA,B;取回余数

MOVB,#10

DIVAB;再除以10

MOVR4,A;商是十位数,存放到R4

MOVR5,B;余数是个位,存放到R5

MOV42H,R4

mOV41H,R5

;R1的BCD码放入41-42H单元

MOVA,R2;取来8位二进制数

MOVB,#100

DIVAB;除以100

MOVA,B;取回余数

MOVB,#10

DIVAB;再除以10

MOVR4,A;商是十位数,存放到R4

MOVR5,B;余数是个位,存放到R5

MOV44H,R4

MOV43H,R5

;R2的BCD码放入43-44H单元

MOVA,R3;取来8位二进制数

MOVB,#100

DIVAB;除以100

MOVA,B;取回余数

MOVB,#10

DIVAB;再除以10

MOVR4,A;商是十位数,存放到R4

MOVR5,B;余数是个位,存放到R5

MOV46H,R4

mov45H,R5

;R3的BCD码放入45-46H单元

L1:

mova,41h

movca,@a+dptr

mov51h,a

mova,42h

movca,@a+dptr

mov52h,a

mova,43h

movca,@a+dptr

mov53h,a

mova,44h

movca,@a+dptr

mov54h,a

mova,45h

movca,@a+dptr

mov55h,a

mova,46h

movca,@a+dptr

mov56h,a;将显示代码送入51H--56H

display:;显示程序

movp0,#0ffH;一

movp0,51H

movP1,#0feH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;二

movp0,52h

movP1,#0fdH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;三

movp0,53h

movP1,#0fbH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;四

movp0,54h

movP1,#0f7H

acalldelay1S

movp1,#0ffH

movp0,#0ffH;五

movp0,55h

movP1,#0efH

acalldelay1S

movp1,#0ffH

movp0,#0ffH;六

movp0,56h

movP1,#0dfH

acalldelay1S

movp1,#0ffH

;将51H-56H数据显示,

AJMPLOOP;工作处理程序

TIME0:;定时器0的中断处理程序

INCR7

MOVA,R7

CJNEA,#20,T_RET;R7单元中的值到了20了吗?

T_L1:

INCR1;到了20那么R1+1

MOVR7,#0;清软件计数器

T_RET:;二十分之一秒时的程序

incr6

mova,r6

cjner6,#3,T_over;调节时间的延迟时间

movr6,#0

jbp2.1,T_over1

mova,r2

adda,#1

cjnea,#60,T_tiao1

mova,#0

T_tiao1:

movr2,a

T_over1:

jbp2.2,T_over

mova,r3

adda,#1

cjnea,#24,T_tiao2

mova,#0

T_tiao2:

movr3,a

T_over:

MOVTH0,#3CH

MOVTL0,#0B0H;如果没到一秒重置定时常数

reti

delay1s:MOV31H,#100

D1:MOV32H,#30

D2:DJNZ32H,D2

DJNZ31H,D1

RET

delay2s:MOV33H,#255

D3:MOV34H,#255

D4:DJNZ34H,D4

DJNZ33H,D3

RET

K1:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

⑶ 单片机C语言编程简易数字电子时钟

#include <AT89X52.h>
unsigned char X=10,sec,flag;
unsigned char key[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 数码管显示数字表
unsigned char key2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned char key1[]={0,0,0,0};//key1[0]=9 key1[1]=1 key1[2]=2 key1[3]=3
void delay02s(void);
void dislplay(void);
void dislplay1(void);
void tim1(void);
void main()
{

tim1();
while(1)
{
if(flag==0) dislplay();
else dislplay1();
}
}

void time1(void) interrupt 3
{
TR1=0;
X=X-1;
if(X==0)
{
flag=flag+1;
if(flag==2)
{
flag=0;
sec=sec+1;

if(sec==60)
{
sec=0;
key1[3]=key1[3]+1;
if(key1[3]==10);
{
key1[3]=0;
key1[2]=key1[2]+1;
if(key1[2]==6)
{
key1[2]=0;
key1[1]=key1[1]+1;
if(key[0]!=2)
{
if(key1[1]==10)
{
key1[1]=0;
key1[0]=key1[0]+1;
}
}
if(key[0]==2)
{
if(key[1]==4)
{
key1[1]=0;
key1[0]=0;
}
}
}
}
}
}
X=10;
}

TL1=0xb0;
TH1=0x3c;
TF1=0;
TR1=1;
}

void tim1(void)
{
TMOD =0X10;
TL1=0xb0;
TH1=0x3c;
EA=1;
ET1=1;
TR1=1;
}

void dislplay(void)
{
P2=0xfe;
P0=key[key1[0]];
delay02s();
P2=0xfd;
P0=key[key1[1]];
delay02s();
P2=0xfb;
P0=key[key1[2]];
delay02s();
P2=0xf7;
P0=key[key1[3]];
delay02s();
}
void dislplay1(void)
{
P2=0xfe;
P0=key[key1[0]];
delay02s();
P2=0xfd;
P0=key2[key1[1]];
delay02s();
P2=0xfb;
P0=key[key1[2]];
delay02s();
P2=0xf7;
P0=key[key1[3]];
delay02s();
}
void delay02s(void)
{
unsigned char i,j,k;
for(i=2;i>0;i--)
{
for(j=15;j>0;j--) //198
{
for(k=25;k>0;k--)//248
{
;
}
}

}
}
我空间还有其他的 http://user.qzone.qq.com/615543707/infocenter?ptlang=2052&ADUIN=615543707&ADSESSION=1276219802&ADTAG=CLIENT.QQ.2653_Mysrv.0

⑷ 利用AT89C51单片机设计简易电子钟(六位),通过8位LED数码管实现时间显示;系统可以通过三个按键实现时间


程序设计思路:1.利用单片机内部定时器作为计时器,调用timer函数;2、设计一套按键子程序;(3)设计一套数码显示管子程序。下列提供一套程序供参考。


#include<iom16v.h>

#include <macros.h>

#define uchar unsigned char

#define uint unsigned int


const uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9对应字符

const uchar key_value[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

uchar data[4]={0}; //显示初始值为0

uint count=0; //初始计数值为0

uchar keynum;



void port_init() //端口初始化函数

{DDRA=0XFF; //端口A为推挽1输出

PORTA=0XFF;

PORTB=0XFF; //端口B为推挽1输出

DDRB=0XFF;

DDRC=0XFF; //端口C为不带上拉电阻的输入

PORTC=0XFF;

DDRD=0XFF; //端口D低4位为输出

PORTD=0X0F;

}



void delay(uint j) //延时函数

{uint k;

while(j--)

{for(k=1000;k>0;k--) ;}

}



void display(uchar *p) //显示函数

{uchar i,sel=0x01;

for(i=0;i<4;i++)

{PORTA=sel; //选通最右边的数码管

PORTB=table[p[i]]; //送字型码

delay(1);

sel=sel<<1; //左移一位

}

}



uchar get_key(void)

{if((PIND&0X0F)!=0X0F) delay(3);

{

PORTD=0XEF;

switch(PIND&0X0F)

{case 0x0e: keynum=key_value[0];break;

case 0x0d: keynum=key_value[4];break;

case 0x0b: keynum=key_value[8];break;

case 0x07: keynum=key_value[12];break;

default:break;

}

PORTD=0xdf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[1];break;

case 0x0d:keynum=key_value[5];break;

case 0x0b:keynum=key_value[9];break;

case 0x07:keynum=key_value[13];break;

default:break;

}


PORTD=0xbf;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[2];break;

case 0x0d:keynum=key_value[6];break;

case 0x0b:keynum=key_value[10];break;

case 0x07:keynum=key_value[14];break;

default:break;

}

PORTD=0x7f;

switch(PIND&0X0F)

{case 0x0e:keynum=key_value[3];break;

case 0x0d:keynum=key_value[7];break;

case 0x0b:keynum=key_value[11];break;

case 0x07:keynum=key_value[15];break;

default:break;

}

while((PIND&0x0f)!=0x0f);

}


return keynum;

}


void process(uint i,uchar *q) //拆分BCD码函数,显示千、百、十、个位

{ q[0]=i/1000;

i=i%1000;

q[1]=i/100;

i=i%100;

q[2]=i/10;

i=i%10;

q[3]=i;

}


void main(void)

{port_init();

PORTB=0xff;

PORTA=0X00;

delay(50);

PORTA=0xff;

while(1)

{get_key();

count=keynum;

process(count,data);

display(data);

}

}

⑸ 如何做一个单片机电子时钟

这个很简单啊,两种思路:1,用单片机定时器来做,优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块(1602液晶比较好);缺点是:定时不是很准,跑的时间长了会有误差,而且主要是程序,要写很多,不过程序不是很难。2,用时钟芯片,一般都用DS1302,还需要单片机最小系统和显示模块,优点是:定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序相对简单。缺点是:外围电路比前者相对复杂一点。如果想做个实际的东西拿来用,建议使用第二种方法,如果是想锻炼自己的编程能力的话,选第一种吧。祝成功!

⑹ 谁能告诉我51单片机简单的led数码管时钟程序 24小时制的(c语言版的)

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uchar time;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0; //位码
P0=(tab[shi/10]); //段码
delay(2);
P2=1;
P0=(tab[shi%10]);
delay(2);
P2=2; //位码
P0=0x40; //段码
delay(2);
P2=3; //位码
P0=(tab[fen/10]); //段码
delay(2);
P2=4;
P0=(tab[fen%10]);
delay(2);
P2=5; //位码
P0=0x40; //段码
delay(2);
P2=6; //位码
P0=(tab[miao/10]); //段码
delay(2);
P2=7;
P0=(tab[miao%10]);
delay(2);

}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{

if(time==20)
{
time=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}

}

}
display(shi,fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}

/*还有什么不明白继续追加*/

⑺ 求一个简单的单片机时钟程序

#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;
}
}
}

⑻ 51单片机简单电子时钟程序,通过按键设置时间,有图,有解析!

#include<reg52.h>
#include<stddef.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineLCD1602_FLAG
#defineLCD1602_PORTP0

sbitlcd1602_rs=P2^0;
sbitlcd1602_e=P2^2;
sbitlcd1602_rw=P2^1;
sbitlcd1602_busy=P0^7;
sbitkey_ch=P3^5;
sbitkey_add=P3^6;
sbitkey_minus=P3^7;

uchari,sec,min,h,date,month,flag;
uintyear;
uchar*chgstr[7]={"","sec","min","hour","date","min","year"};
ucharj,k,m,n,o,p;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchartimestr[10],datestr[10];
voidinit();
voiddelay(uint);
voidtime_display();
voiddate_display();
voidcontrol();
voidtime();
/*
************************************
*函数名称:lcd1602_CheckBusy()
*函数功能:状态查询
************************************
*/

voidlcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}

/*
***************************************
*函数名称:lcd1602_WriteCmd()
*函数功能:写命令
*入口参数:命令字
*出口参数:无
***************************************
*/

voidlcd1602_WriteCmd(constucharcmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}

/*
*******************************************
*函数名称:lcd1602_WriteData()
*函数功能:写数据
*入口参数:c--待写数据
*出口参数:无
*********************************************
*/

voidlcd1602_WriteData(constucharc)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}

/*
***********************************************
*函数名称:lcd1602_Init()
*函数功能:初始化LCD
*入口参数:无
*出口参数:无
***********************************************
*/

voidlcd1602_Init()
{
lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵
lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,
lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove
lcd1602_WriteCmd(0x01);//clearscreen
}

/*
************************************************
*函数名称:lcd1602_Display()
*函数功能:字符显示
*入口参数:ptr--字符或字符串指针
*出口参数:无
*说明:用户可通过以下方式来调用:
*1)lcd1602_Display("Hello,world!");
*2)INT8U存储类型txt[]="要显示的字符串";
*或者INT8U存储类型txt[]={'t','x','t',..,''};
*INT8U*ptr;
*ptr=&txt;
*lcd1602_Display(ptr);
*或lcd1602_Display(txt);
*或lcd1602_Display(&txt);
************************************************
*/

voidlcd1602_Display(constuchar*ptr,ucharline,ucharxaddr)
{
uchardatai=0;
uchar*dataq;

q=ptr;
switch(line)
{
case0:
lcd1602_WriteCmd(0x80+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
case1:
lcd1602_WriteCmd(0xc0+xaddr);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}


voidmain()
{
lcd1602_Init();
init();
while(1)
{
time_display();
date_display();
control();
}
}
voidinit()
{
i=0;
sec=0;
min=30;
h=7;
date=17;
month=10;
year=2017;
flag=0;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidtime_display()
{
timestr[7]=0x30+sec%10;
timestr[6]=0x30+sec/10;
timestr[5]=':';
timestr[4]=0x30+min%10;
timestr[3]=0x30+min/10;
timestr[2]=':';
timestr[1]=0x30+h%10;
timestr[0]=0x30+h/10;
timestr[8]=0;
lcd1602_Display(timestr,1,3);
}
voiddate_display()
{
datestr[9]=0x30+date%10;
datestr[8]=0x30+date/10;
datestr[7]=':';
datestr[6]=0x30+month%10;
datestr[5]=0x30+month/10;
datestr[4]=':';
datestr[3]=0x30+year%10;
datestr[2]=0x30+year/10%10;
datestr[1]=0x30+year/100%10;
datestr[0]=0x30+year/1000;
lcd1602_Display(datestr,0,2);
}
voidcontrol()
{
if(!key_ch)
{
delay(5);
if(!key_ch)
{
flag++;
TR0=0;
if(flag==7)
{flag=0;TR0=1;lcd1602_Init();}
lcd1602_Display(chgstr[flag],1,12);
}
}
while(!key_ch);
if(flag==1&&key_add==0)
{
while(!key_add);
sec++;
if(sec==60)
sec=0;
}
if(flag==1&&key_minus==0)
{
while(!key_minus);
sec--;
if(sec==-1)
sec=59;
}

if(flag==2&&key_add==0)
{
while(!key_add);
min++;
if(min==60)
min=0;
}
if(flag==2&&key_minus==0)
{
while(!key_minus);
min--;
if(min==-1)
min=59;
}

if(flag==3&&key_add==0)
{
while(!key_add);
h++;
if(h==24)
h=0;
}
if(flag==3&&key_minus==0)
{
while(!key_minus);
h--;
if(h==-1)
h=23;
}

if(flag==4&&key_add==0)
{
while(!key_add);
date++;
if(date==29)
if((year%4!=0)&&(month==2))
date=1;
if(date==30)
if((year%4==0)&&(month==2))
date=1;
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
date=1;
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
date=1;
}

if(flag==4&&key_minus==0)
{
while(!key_minus);
if(date>1)date--;
}

if(flag==5&&key_add==0)
{
while(!key_add);
month++;
if(month==13)
month=1;
}
if(flag==5&&key_minus==0)
{
while(!key_minus);
month--;
if(month==0)
month=12;
}

if(flag==6&&key_add==0)
{
while(!key_add);
year++;
if(year==99)
year=1;
}
if(flag==6&&key_minus==0)
{
while(!key_minus);
year--;
if(year==0)
year=99;
}
}

voidT0_rpt()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
time();
}

voidtime()
{
if(i==20)
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
h++;
if(h==24)
{
h=0;
min=0;
sec=0;
date++;
if(date==29)
if((year%4!=0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==30)
if((year%4==0)&&(month==2))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==31)
if((month==4)||(month==6)||(month==9)||(month==11))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
if(date==32)
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
{
date=1;
month++;
if(month==13)
{
month=1;
year++;
}
}
}
}
}
}
}

⑼ 51单片机做数字电子钟

这么复杂的东西给这么少分 晕死了 你也太小气了吧,分多的话还可能帮你动动脑

⑽ 利用51单片机和3位数码管实现10分钟内的简易计时器

修改如下:
#include<reg51.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbitkey1=P2^7;
sbitkey2=P2^6;
sbitweiH=P3^0;
sbitweiM=P3^1;
sbitweiL=P3^2;
uintnum=0,ge=0,shi=0,fen=0,k;//num用来计数,ge为各位显示,shi为十位显示,fen为分钟显示

voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}

ucharkey1scan(void)
{if(key1==0)
{delayms(10);
if(key1==0)
{while(!key1);
return1;
}
return0;
}

ucharkey2scan(void)
{if(key2==0)
{delayms(10);
if(key2==0)
{while(!key2);
return1;
}
}
return0;
}

voidshowtime()interrupt1//时间显示
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
num++;
num%=3;
switch(num)
{
case0:
weiL=1;//显示秒的个位
P1=0xff;
P1=table[ge];
delayms(5);
weiL=0;
break;
case1:
weiM=1;//显示秒的十位
P1=0xff;
P1=table[shi];
delayms(5);
weiM=0;
break;
case2:
weiH=1;//显示分钟,只显示0-9
P1=0xff;
P1=table[fen];
delayms(5);
weiH=0;
break;
}

voidmain()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
num=0;
while(1)
{
if((key1scan()==1)&&(key2scan()!=1))break;//按键1按下,按键2未按下开始计时
}
while(1)
{
delay(1000);
ge++;
if(ge>9)
{
ge=0;
shi++
if(shi>5)
{
fen++;
if(fen>9)fen=0;
}
}
showtime();
}
}

阅读全文

与简易时钟单片机相关的资料

热点内容
压缩机工艺管是多大的 浏览:310
安卓刷什么系统稳定 浏览:33
程序员写炫酷代码 浏览:928
大话存储pdf 浏览:524
中铭机器人怎么编程 浏览:812
把字母变为数字的加密法 浏览:523
噬血狂袭第三季哪个app能看 浏览:421
江苏螺杆压缩机 浏览:980
android底部弹出对话框 浏览:501
怎么查服务器同行fc号 浏览:1000
什么服务器云鸟最便宜 浏览:221
vs编译器反汇编 浏览:570
程序员直播做项目创业 浏览:403
linux下samba配置 浏览:797
程序员面试银行岗位会有编制吗 浏览:414
ex表怎么加密码保护 浏览:173
小孩上编程课用哪款好 浏览:559
如何制作服务器商店 浏览:736
压缩气管阀门 浏览:466
pdf推文 浏览:361