AT89C51单片机电子时钟 连线:P00---P07 分别和U7D0—U7D7相连 要求:格式:HHMMSS,并具有设置时间的功

作者&投稿:杭衬 (若有异议请与网页底部的电邮联系)
单片机60秒计时器的程序,用AT89C51实现~

//1:用AT89C51单片机的定时/计数器T0产生一秒的
//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};
void display(uchar fen,uchar miao);
uchar a,fen,miao,shu;
void delay(uint z);
void init();
void main()
{
init();
while(1)
{
display(fen,miao);
}

}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)
{
a=0;
shu++;
fen=shu/10;
miao=shu%10;
if(shu==60)
shu=0;
}

}

void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display(uchar fen,uchar miao)
{
P1=0xFe;
P2=table[fen];
delay(5);//延时5毫秒

P1=0xFf;
P2=table[miao];
delay(5);//延时5毫秒
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

小时个位的数码管显示字最高位表示小时后的冒号。
通常情况下,还需每秒将此位置0、延时、再置1,以控制冒号闪烁。

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;

sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
uchar Display_Buffer[8];
uchar Count,hour=12,min=12,sec=12;
bit flag,H_or_M;

void _delay_ms(unsigned int x)
{
unsigned char i;
while(x--)
{
for(i=0;i<120;i++);
}
}
uchar LCD_Busy(void)//测忙
{
uchar LCD_Status;//返回值变量
LCD_RS=0;//读取状态
LCD_RW=1;
LCD_EN=1;
_nop_();_nop_();_nop_();_nop_();
LCD_Status=P0;
LCD_EN=0;
return LCD_Status;
}
void LCD_Write_Command(uchar cmd)//写指令
{
while((LCD_Busy()&0x80)==0x80);//测忙
LCD_RS=0;//
LCD_RW=0;
LCD_EN=0;
P0=cmd;
LCD_EN=1;
_nop_();_nop_();
LCD_EN=0;
_nop_();_nop_();
}
void LCD_Write_Data(uchar dat)//写数据
{
while((LCD_Busy()&0x80)==0x80);
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
LCD_EN=1;
_nop_();_nop_();
LCD_EN=0;
_nop_();_nop_();
}
void Init_LCD(void)//液晶初始化
{
_delay_ms(15);
LCD_Write_Command(0x38);
_delay_ms(5);
LCD_Write_Command(0x06);
_delay_ms(5);
LCD_Write_Command(0x0c);
_delay_ms(5);
LCD_Write_Command(0x01);
_delay_ms(5);

}
void LCD_POS(uchar pos)//字符显示位置
{
LCD_Write_Command(0x80|pos);
}
void Show_String(uchar *str)//显示字符串
{
while(*str!='\0')
LCD_Write_Data(*str++);
}
/////lcd1602液晶显示//////
void Display_Time(uchar Hour,uchar Min,uchar Sec)
{
Display_Buffer[0]=Hour/10+'0';//小时十位
Display_Buffer[1]=Hour%10+'0';//小时个位
Display_Buffer[2]=':';//显示:号
Display_Buffer[3]=Min/10+'0';//显示分钟十位
Display_Buffer[4]=Min%10+'0';//显示分钟个位
Display_Buffer[5]=':';//显示:号
Display_Buffer[6]=Sec/10+'0';//显示秒十位
Display_Buffer[7]=Sec%10+'0';//显示秒个位
LCD_POS(0x40);//显示在液晶第1行第0列
Show_String(Display_Buffer);
}
/////按键处理//////
void Set_time(void)
{
flag=0;
if(key1==0||key2==0||key3==0)//若key1,key2,key3其中有键按下,则为真
{
TR0=0;//定时器0停止
flag=1;//按键标志位为真
}
while(flag)//判断那一个按键按下
{
if(key1==0)//判断key1是否按下
{
while(!key1);//等待释放
H_or_M=!H_or_M;//选择是修改时还是分钟
}
else if(key2==0)//判断key2是否被按下
{
while(!key2);//等待释放
if(H_or_M)//若H_OR_M为真,则修改小时
{
if(++hour==24)//若小时=24,则小时=0
hour=0;//小时加1
}
else//否则修改分钟
{
if(++min==60)//若分钟等于60,则分钟等于0
min=0;//分钟加1
}
}
else if(key3==0)//判断key3是否被按下
{
while(!key3);//等待释放
if(H_or_M)//若H_OR_M为真,则修改小时
{
if(--hour==0xff) //小时减1,若小时等于-1,则小时等于23
hour=23;
}
else//否则修改分钟
{
if(--min==0xff)//分钟减1,若分钟等于-1,则分钟等于59
min=59;
}
}
else if(key4==0)//判断key4是否被按下
{
while(!key4);//等待释放
flag=0;//按键标志清零
TR0=1;//定时器0启动
}
Display_Time(hour,min,sec);//传H,M,S值显示到液晶
}
}
void timer0_init(void)//定时器0初始化
{
TMOD=0x01;//定时器0,方式1
ET0=1;//
EA=1;//总中断允许
TR0=1;//启动定时器0
TH0=(65535-50000)/256;//装高8位初值
TL0=(65535-50000)%256;//装低8位初值
}
void main(void)//主函数
{
P1=0xff;//端口初始化
P3=0xff;
Init_LCD();//液晶初始化
timer0_init();//定时器0初始化
while(1)//无限循环
{
Display_Time(hour,min,sec);//液晶显示时间
//_delay_ms(500);//延时
Set_time();//时间调整
}
}
void timer0() interrupt 1//定时器0中断
{
TH0=(65535-50000)/256;//重装定时器0高8位
TL0=(65535-50000)%256;//重装定时器0低8位
Count++;//计数加1
if(Count==20)//如果COUNT等于20
{
Count=0;//计数清零
sec++;//秒加1
if(sec==60)//判断秒是否等于60
{
sec=0;//秒清零
min++;//分钟加1
if(min==60)//判断分钟是否等于60
{
min=0;//若等于60,则清零分钟
hour++;//小时加1
if(hour==24)//判断小时是否等于24
{
hour=0;//若小时等于24,则清零小时,分钟,秒
min=0;
sec=0;
}
}
}
}
}

我这个是用51单片机内部定时器做的一个简易LCD液晶数字时钟,可以满足你的要求,你可以参考一下!


急求基于单片机AT89C51的多功能数字电子钟的汇编程序,高手进!~_百度知...
用89C51控制3个HC595,前两个595接8段数码显示管,显示“0”~“9”每秒跳动一次.第3个HC595接8个LED灯,每隔1秒闪烁1次.include<at89x52.h> include<intrins.h> define uchar unsigned char define uint unsigned int uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90...

89C51单片机定时器初值怎么计算
在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12\/晶振频率。X为定时器初值。则 X=2^n-T\/T1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8 ...

89C51单片机的时钟周期与振荡周期之间有什么关系?一个机器周期的时序如...
时钟周期一个时钟脉冲所需要的时间。在计算机组成原理中又叫T周期或节拍脉冲。是CPU和其他单片机的基本时间单位。它可以表示为时钟晶振频率(1秒钟的时钟脉冲数)的倒数。时钟周期是单片机的基本时间单位,两个振荡周期(时钟周期)组成一个状态周期,若时钟晶振的振荡频率为fosc,则时钟周期Tosc=1\/fosc(即为...

STC89C51和AT89S51单片机有什么区别吗
差别是:1、工作电压:STC 3.3V~5.5V AT 4.0~5.5V 2、工作频率:STC 0~40MHz AT 0~33MHz 3、用户程序空间:STC 4K\/8K\/13K\/16K\/32K\/64K AT 4K 4、片上集成RAM:STC 512\/1280Byte AT 128Byte 5、程序下载:STC ISP\/IAP AT ISP 6、速度:STC 6T模式 ...

stc89c51单片机,在使用12mhz晶核的情况下,一个机器周期为多长时间?若...
89C51单片机,12T模式机器周期,即机器周期 T=12\/Fosc=12\/12MHz=1us;12C5A60S2 的机器周期 固定为 1T模式,即 机器周期 T=1\/Fosc=1\/12MHz=1\/12 us;速度是 89C51 的12倍。

stc89c52单片机和51单片机的区别
1、种类不同:51系列单片机是指51内核,stc89c5X基本都是51内核的种类。2、大小不同:最后一个数字表示E2prom的大小,E2prom=X*4K,c51就是4K,c52就是8k。3、配件不同:52还多了一个定时器,所以可以说52是51(这个51是指stc89c51,不是51内核)的增强型。如下图,可以很清晰的看出两者之间...

用89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角...
本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。在本设计的基础上,加上按钮控制和LED显示器,则可通过按钮设定所需要的波形频率,并在LED上显示频率、幅值电压,波形可用示波器显示...

求大佬教教怎么用89c51单片机实现模拟路灯
1. 准备材料:89c51单片机、LED灯、电阻、面包板、杜邦线等。2. 连接电路:将89c51单片机与LED灯连接起来。将LED的正极连接到单片机的一个IO口,将LED的负极通过一个适当大小的电阻连接到单片机的地线。3. 编写程序:使用C语言编写程序,通过控制IO口的高低电平来控制LED灯的亮灭。以下是一个简单的示例...

51单片机的引脚结构和功能
T89C2051是精简版的51单片机,精简掉了P0口和P2口,只有20引脚,但其内部集成了一个很实用的模拟比较器,特别适合开发精简的51应用系统,毕竟很多时候我们开发简单的产品时用不了全部32个I\/O口,用AT89C2051更合适,芯片体积更小,而且AT89C2051的工作电压最低为2.7V,因此可以用来开发两节5号电池供电...

89C51单片机计数器受CPU中断影响吗
计数不影响 单片机内部有计数器,自己会计数,所以不用CPU来计数 只有计数器计数满了之后,会产生中断信号通知CPU处理中断程序

历城区13063368175: 求教单片机89C51电子时钟 -
车水孚立: 5个够了,位选各1个刚刚好,段选没必要加.你都已经定义了单片机的IO了,还不会连接?W1~W4不就是段选咯,串一个电阻连接到8050的基极;key1~key4是按键;sbit LED=P3^4; //这里我想是88:88之间那个冒号吧,一样串个电阻接到驱动冒号的三极管B极 sbit SCLK=P3^5; sbit DATA=P3^6; sbit CE=P3^7; //下面这三个是DS1302的三个引脚,对着接上就行了,最好各自加一个上拉电阻.

历城区13063368175: 制作一个建议电子手表电路,如果要用AT89C51单片机的话,应该连接哪几个端口
车水孚立: 还C51.你用S51吧.支持在线烧写. 端口我帮你大概分配下.P0加上啦电阻接数码管对应P0.0~P0.7接a~h. P2用P2.0~P2.2接138做数码管片选. P1.0~P1.1做三个按键 9脚复位也要接个按键( 复位) 玩玩可以,但实际肯定不行,单片机时钟(机器周期长)定时不准 你真要做时钟的话,建议加个DS1302万年历时钟芯片.具体方案我不写了.想玩在给你讲~~~

历城区13063368175: 求使用AT89C51单片机和74LS245来实现数字钟的C语言代码,只要能显示时分秒就行.K3开关,K1是选择键,K2是 -
车水孚立: 如只编程序,可以.如做实物:AT89C51单片机功能强大,不用74245,可用巡回显示法,但应加一个DS1302之类的时钟电路,否则时间不会太准,甚至用不了,还有就是一断电就要重调时间,你受得了吗.

历城区13063368175: 用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上. -
车水孚立: 按照你的要求写的程序如下,你拿去测试吧!#include "REG52.H" sbit SHUG_01 = P2^0; //数码管1 sbit SHUG_02 = P2^1; //数码管2 sbit SHUG_03 = P2^2; //数码管3 sbit SHUG_04 = P2^3; //数码管4 sbit SHUG_05 = P2^4; //数码管5 ...

历城区13063368175: 谁有用AT89C51单片机来设计电子钟的设计 -
车水孚立: .;有秒、分钟:14 此电子钟主要选用AT89C51单片机控制..你可以看 一下下面的参考资料,便于使用;市电断电后能继续保持时间的正常运行,来电后恢复显示.,外形美观、大方: hnmegpkmoi31328377562011-10-13 6:17,每年的时间误差小于三分钟;还可用遥控来对电子钟进行调整..,并采用数字显示、小时及星期的显示,计时准确,显示醒目、直观

历城区13063368175: 用AT89C51设计电子时钟并画电路图? -
车水孚立: 89C51 LED电子钟 参考链接: http://www.51picavr.com/news/c8/2009-01/109.htm *APPLICATION NOTE E6000 ICEXPLORER *************** * Title: FOR colk_time * * Version: 00 * * Last Updated: * * MCU: AT89C91 * * FOR: WWW.PICAVR....

历城区13063368175: 设计一个基于AT89C51单片机的电子钟 -
车水孚立: #include #define uchar unsigned char sbit k1=P1^0; sbit k2=P1^1; sbit sounder=P3^7; uchar h=12,m=0,s=58,c=0; //延时子程序 void delay(unsigned int a){while(--a); } //数码管显示(共阳): 0 1 2 3 4 5 6 7 8 9 uchar code dArr[]={0xC0,0xF9,0...

历城区13063368175: 基于单片机的电子时钟 -
车水孚立: 去百度文库,查看完整内容> 内容来自用户:啊宝1688 绪论 单片机在多功能数字电子钟中的应用已是非常普遍,人们对电子时钟的功能及工作顺序都已非常熟悉了,但是却很少知道它的内部结构以及工作原理.由单片机作为电子时钟的核心控...

历城区13063368175: 基于 单片机AT89C51的电子时钟的电路图和程序怎么做 -
车水孚立: 你开个定时器,比如说定时器时基为10ms,那么中断了100次就是1s,60个1s就是1分钟,60个1分钟就是1小时,24个1小时就是1天.

历城区13063368175: 单片机电子钟程序 -
车水孚立: 51单片机在数码管上显示的数字钟程序:#include "at89x51.h" unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网