51单片机的秒表时钟计时器设计——AT89S51

高职单招 2024-11-10 09:50:36

关于51单片机 的秒表/时钟计时器设计摘要

本设计以AT89S51单片机为核心芯片,与型号为1602的液晶显示器构成数字电子时钟电路。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4K Bytes ISP(In- programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及AT89C51引脚结构,芯片内集成了通用8位处理器和ISP Flash存储单元,功能强大的计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案.液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

51单片机的秒表时钟计时器设计——AT89S5151单片机的秒表时钟计时器设计——AT89S51


51单片机的秒表时钟计时器设计——AT89S51


51单片机的秒表时钟计时器设计——AT89S51


51单片机的秒表时钟计时器设计——AT89S51


51单片机设计电子时钟。

#include

#define uint unsigned int

#define uchar unsigned char

it key1=P3^0;

it key2=P3^1;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchar shi,fen,miao,num1 ,num2,num3,num4,num5,num6,num7;

void delayms (uint xms)

{uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}void miaodisplay (uchar num6,uchar num5)

{P2=0x00;

P2=0x80;

P1=table[num6];

delayms(5);

P2=0x00;

P2=0x40;

P1=table[num5];

delayms(5);

}void fendisplay(uchar num4,uchar num3)

{P2=0x00;

P2=0x10;

P1=table[num4];

delayms(5);

P2=0x00;

P2=0x08;

P1=table[num3];

delayms(5);

}void shidisplay(uchar num2,uchar num1)

{P2=0x00;

P2=0x02;

P1=table[num2];

delayms(5);

P2=0x00;

P2=0x01;

P1=table[num1];

delayms(5);

}void main ()

{TMOD=0x01;

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

EA=1;

ET0=1;

TR0=1;

shi=0;

fen=0;

miao=0;

num7=0;

while (1)

{num1=shi/10;

num2=shi%10;

num3=fen/10;

num4=fen%10;

num5=miao/10;

num6=miao%10;

miaodisplay(num6,num5);

P2=0x00;

P2=0x20;

P1=0xbf;

delayms(5);

fendisplay(num4,num3);

P2=0x00;

P2=0x04;

P1=0xbf;

delayms(5);

shidisplay(num2,num1);

}}

void T0_time () interrupt 1

{TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

num7++;

if(num7==20)

{num7=0;

miao++;

if(miao==60)

{miao=0;

fen++;

if(fen==60)

{fen=0;

shi++;

if(shi==24)

{shi=0;

fen=0;

miao=0;

}}

}}

}

基于51单片机的数码管设计电子时钟,可以调时间的,怎么弄唉,大家帮帮忙...

说一下步骤吧:

1、数码管驱动电路设计。一般用三极管如9013或者锁存器如74HC573来驱动,使其能够正常亮灭。

2、使用动态扫描的方式让数码管能够显示你想要的数字,这个可以用中断来扫描也可以不用。

3、使用实时时钟芯片如DS1302来获得你想要的时间数据。这种网上有很多源程序,你可以搜索看。你要学会几点:(1)对芯片初始化;(2)获得时间数据;(3)知道怎么修改数据。

4、使用按键来修改时间数据。这个方法很多,尽提供参考的。使用三个按键,分别是:设置按键(这个是复用按键,按一次进入设置模式,并让某一位闪烁,再按则依次让下一位闪烁,表示被选择,直到要设置的数字完成再按则确认设置),+键和-键。这个不仅仅是修改数据那么简单,还需要涉及到对DS1302数据的修改,需要关闭DS1302的写保护功能,设置结束后再打开这个功能。

以上字字手打,希望对你有帮助

51单片机控制的电子时钟系统 毕业设计

可以用1302做

我有现成的

LCD1602

显示的,51做的

基本思路是用单片机读取1302里面的信息,处理,然后送LCD1602显示。

有兴趣可以去我博客看,里面还上传了之前我做的实物和PCB,可以照着做。

求C51单片机数字电子时钟课程设计

#include

#include

#include

#define

unit

unsigned

int

#define

uchar

unsigned

char

//#define

HZ

12

it

key0=P0^0;

//

分钟调整

it

key1=P0^1;

//

小时调整

it

P2_0=P2^7;

//秒

指示灯

it

MN_RXD=P3^6;

it

MN_TXD=P3^7;

uchar

data

CLOCK[4]={0,0,0,12};//存放时钟时间(百分秒,秒,分,和时位)

//数码管显示表0-f

灭uchar

code

TABLE[]={0xBE,0x06,0xEA,0x6E,0x56,0x7C,0xFC,0x0E,0xFE,0x7E,0x00};

//

//模拟串口发送一个字节数据

函数

//

void

SendData(unsigned

char

senddata)

{unsigned

char

i;

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

{if((senddata&0x01)==0)

MN_RXD=0;

else

MN_RXD=1;

_nop_();

MN_TXD=0;

_nop_();

MN_TXD=1;

senddata=senddata>>1;

}}

//

//显示程序函数

//

void

display(void)

{//

unsigned

int

n;

uchar

temp;

temp=CLOCK[1];

temp=temp%10;

SendData(TABLE[temp]);

temp=CLOCK[1];

temp=temp/10;

SendData(TABLE[temp]);

temp=CLOCK[2];

temp=temp%10;

SendData(TABLE[temp]);

temp=CLOCK[2];

temp=temp/10;

SendData(TABLE[temp]);

temp=CLOCK[3];

temp=temp%10;

SendData(TABLE[temp]);

temp=CLOCK[3];

temp=temp/10;

SendData(TABLE[temp]);

/

for(n=0;n<5000;n++);

for(n=0;n<6;n++)

{SendData(TABLE[10]);

}/

}//

//按键控制函数

//

void

keycan()

{unsigned

int

n;

EA=0;

if(key0==0)

//

分钟调整

{for(n=0;n<10000;n++);

//延时去抖动

while(key0==0);

CLOCK[2]=CLOCK[2]+1;

if(CLOCK[2]==60)

//到一时

{CLOCK[2]=0;

}display();

}if(key1==0)

//

小时调整

{for(n=0;n<10000;n++);

//延时去抖动

while(key1==0);

CLOCK[3]=CLOCK[3]+1;

if(CLOCK[3]==24)

{CLOCK[3]=0;

}display();

}EA=1;

}//

//T0中断服务函数

//

void

time0()

interrupt

1//using

1{

TH0=0xD8;

TL0=0xF0;

//重置初值

//

TH0=0xB1;

TL0=0xE0;

//时钟处理

CLOCK[0]=CLOCK[0]+1;

}//

//主函数

//

void

main()

{EA=1;

ET0=1;

TMOD=0x01;

//T0方式1定时

TH0=0xD8;

TL0=0xF0;

//D8F0

定时10ms

//

TH0=0xB1;

TL0=0xE0;

//定时

20ms

TR0=1;

for(;;)

{if(CLOCK[0]==100)

//到一秒

10ms100

{CLOCK[0]=0;

P2_0=~P2_0;

CLOCK[1]=CLOCK[1]+1;

if(CLOCK[1]==60)

//到一分

{CLOCK[1]=0;

CLOCK[2]=CLOCK[2]+1;

if(CLOCK[2]==60)

//到一时

{CLOCK[2]=0;

CLOCK[3]=CLOCK[3]+1;

if(CLOCK[3]==24)

{CLOCK[3]=0;

}}

}display();

}keycan();

}}

版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。