基于STC89C52多功能电子时钟系统程序+原理图

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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]);
/*Date : 2012.11.03 */
/* All Rights Reserved. */
/******************************************/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
uint write_time1,write_time2,write_time3; //999.9秒。
uchar time[7];
uchar ok_value,ii,ix,temp;
//************************************
//延时程序
//************************************
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();
(注:此三种模式可以通过SET键盘来回切换,在正常时钟模式,第二排显示S:time,校准模式显示S:adjst,秒表模式,是TN~T3:四个秒表模式);
②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。
(注:这个已经全部显示了,含星期)
③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz;
#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;
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";
_nop_();
RW=1;
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
if((P0&0x80)==0)
{
break;
}
E=0;
}
}
//************************************
//LCD1602写命令
//************************************
#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;
void delay(unsigned int N)
{
unsigned int i;
for(i=0;i<N;i++);
}
void Time0_init(void)//定时器初始化
{
TMOD=0x01; //定时器设置
TH0=(65536-50000)/256; //定时器0赋初值
TL0=(65536-50000)%256;
(注:这个都实现了,要验证的话就是将时钟调整到59分后验证即可)
④.在系统校准模式时,系统具有快速校准பைடு நூலகம்间的功能。
(注:按SET键进入校正模式可以对时钟进行校正,UP向上,DOWN键向下,按STOP键保存退出,遗憾的是,这个正在调节的参数无法反白显示)
⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。
}
}
/*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
//函数等变量
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;
}
}
}
//************************************
//LCD1602测忙
//************************************
void check_busy(void)
{
while(1)
{
P0=0xff;
E=0;
_nop_();
RS=0;
_nop_();
(注:按SET键进入秒表模式,按0K键启动,STOP键清零,按UP键记录,可以对100ms的定时器开始计时,最大999.9秒,按下UP键盘,则记录一个,总共记3个,T1-T3,按SET键退出)
⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。
乖乖,真的是1602显示的啊。
systimer1_10ms++;
if(systimer_10ms>=200)
{
systimer_1s++;
systimer_10ms=0;
}
if(systimer1_10ms>=20) //也为100ms,即0.1S的精度.
{
if(set_sel==2)
{
if(dingshi_flag)
{
dingshi_timer++;
sbit RW=P2^6;
sbit RS=P2^7;
//DS1302数据接口
sbit rst=P3^4;
sbit sclk=P3^2;
sbit io=P3^3;
//KEY输入接口
sbit KEY_OK=P1^0;
sbit KEY_STOP=P1^1;
sbit KEY_UP=P1^2;
sbit KEY_SET=P1^3;
}
//************************************
//LCD1602写数据
//************************************
void write_data(uchar tempdata)
{
E=0;
_nop_();
_nop_();
RS=1;
_nop_();
一、设计任务
设计制作一台以控制器为核心的多功能电子时钟系统
二、设计要求:
①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。(PC主机端可利用高级语言进行人机界面设计)
②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。
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位
}
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;}
_nop_();
RW=0;
P0=tempdata;
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
E=0;
_nop_();
_nop_();
check_busy();
}
//************************************
//初始化LCD1602
//************************************
{
sclk=0;
temp=ucda;
io=(bit)(temp&0x01);
ucda>>=1;
sclk=1;//上升沿写入
nop();nop();
}
rst=0;
}
//从ds1302某地址读数据
⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。
原理图
一、设计任务
设计制作一台以控制器为核心的多功能电子时钟系统
二、设计要求:
①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。(PC主机端可利用高级语言进行人机界面设计)
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;
/******************************************/
/*File Name: main.c */
/*Function : The entrance of all fuctions */
/*Author : WuYingjian */
/*Version : V1.0 */
void init_lcd1602()
{
write_command(0x01);//清除屏幕
write_command(0x38);//功能设定(8位,2行,5*7点阵式)
write_command(0x0c);//显示器ON,光标OFF,闪烁OFF
write_command(0x06); //地址加1
③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。高音频率为1KHz;
④.在系统校准模式时,系统具有快速校准时间的功能。
⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。
uchar code dot_tab[] ="0112334456678899";
uchar first_line[16]="2012-09-24 WEEK1";//LCD第一行显示缓存数组
uchar second_line[16]="11:13:25 S:time";//LCD第二行显示缓存数组,正常显示时间。
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++;
相关文档
最新文档