当前位置:
文档之家› 基于STC89C52多功能电子时钟系统程序+原理图
基于STC89C52多功能电子时钟系统程序+原理图
uchar code dot_tab[] ="0112334456678899";
uchar first_line[16]="2012-09-24 WEEK1";//LCD第一行显示缓存数组
uchar second_line[16]="11:13:25 S:time";//LCD第二行显示缓存数组,正常显示时间。
if(dingshi_timer>=9999)
{dingshi_timer=0;}
if((dingshi_flag_up==1)&&(KEY_UP==0))
{
write_time1 = dingshi_timer;
}
if((dingshi_flag_up==2)&&(KEY_UP==0))
{
write_time2 = dingshi_timer-write_time1;
_nop_();
RW=0;
P0=tempdata;
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
E=0;
_nop_();
_nop_();
check_busy();
}
//************************************
//初始化LCD1602
//************************************
/******************************************/
/*File Name: main.c */
/*Function : The entrance of all fuctions */
/*Author : WuYingjian */
/*Version : V1.0 */
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //开始计数
}
void t0(void) interrupt 1 using 1 //定时器0中断服务子程序
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
systimer_10ms++;
③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz;
④.在系统校准模式时,系统具有快速校准时间的功能。
⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。
}
if((dingshi_flag_up==3)&&(KEY_UP==0))
{
write_time3 = dingshi_timer-write_time2-write_time1;
}
}
if(KEY_STOP==0)
{dingshi_flag=0;dingshi_timer=0;dingshi_flag_up=0;write_time1=write_time2=write_time3=0;}
(注:这个都实现了,要验证的话就是将时钟调整到59分后验证即可)
④.在系统校准模式时,系统具有快速校准时间的功能。
(注:按SET键进入校正模式可以对时钟进行校正,UP向上,DOWN键向下,按STOP键保存退出,遗憾的是,这个正在调节的参数无法反白显示)
⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。
//函数等变量
uchar set_sel;
uint systimer_10ms,systimer1_10ms,systimer_1s,systimer_1m;
uchar alarm_beep=0,alarm_flag=0; //设定报警标志.
uint dingshi_timer,dingshi_flag_up=0,dingshi_flag_down,dingshi_flag;
#define WEEK 5
#define YEAR 6
//#include"font.h"
//#include"intrins.h"
//#include "lcd12864.h"
//向DS1302某地址写1字节的数据/命令
void write_B(uchar addr,uchar ucda)
{
uchar i,temp;
#define uchar unsigned char
#define nop _nop_
void write_command(uchar tempdata);
/*引脚定义*/
sbit BusyFlag=P0^7;
sbit ALARM_BEEP = P2^4; //报警喇叭
//LCD控制接口
sbit E=P2^5;
sclk=0;
rst=0;
nop();
rst=1;//打开数据传送
for(i=0;i<8;i++) //写命令8位
{
sclk=0;
temp=addr;
io=(bit)(temp&0x01);
addr>>=1;
sclk=1;//上升沿写入
nop();
nop();
}
for(i=0;i<8;i++) //写数据8位
void write_command(uchar tempdata)
{
E=0;
_nop_();
_nop_();
RS=0;
_nop_();
_nop_();
RW=0;
P0=tempdata;
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
E=0;
_nop_();
_nop_();
check_busy();
sbit KEY_DOWN=P1^4;
sbit bit7=ACC^7; //单片机内部移位寄存器ACC声明;
sbit bit0=ACC^0;
//显示界面LCD1602
uchar LCD_4,LCD_3,LCD_2,LCD_1,LCD_0;
uchar code LCDData[] ="0123456789";
}
}
/*DS1302的操作*/
#define uint unsigned int
#define uchar unsigned char
#define nop _nop_
#define SECOND 0
#define MINUTE 1
#define HOUR 2
#define DAY 3
#define MONTH 4
(注:此三种模式可以通过SET键盘来回切换,在正常时钟模式,第二排显示S:time,校准模式显示S:adjst,秒表模式,是TN~T3:四个秒表模式);
②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。
(注:这个已经全部显示了,含星期)
③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz;
delay(5);
}
void display(void)
{
uchar i;
write_command(0x80);
for(i=0;i<16;i++)
{
write_data(first_line[i]);
}
write_command(0xc0);
for(i=0;i<16;i++)
{
write_data(second_line[i]);
void init_lcd1602()
{
write_command(0x01);//清除屏幕
write_command(0x38);//功能设定(8位,2行,5*7点阵式)
write_command(0x0c);//显示器ON,光标OFF,闪烁OFF
write_command(0x06); //地址加1
一、设计任务
设计制作一台以控制器为核心的多功能电子时钟系统
二、设计要求:
①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。(PC主机端可利用高级语言进行人机界面设计)
②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。
}
//************************************
//LCD1602写数据
//************************************
void write_data(uchar tempdata)
{
E=0;
_nop_();
_nop_();
RS=1;
_nop_();
systimer1_10ms++;
if(systimer_10ms>=200)
{
systimer_1s++;
systimer_10ms=0;
}
if(systimer1_10ms>=20) //也为100ms,即0.1S的精度.