单片机电子钟实训报告(2)

2019-02-14 23:46

2.2 电子时钟电路图

图2-3 线路连接图

2.3 电子时钟程序设计

6

1、程序流程图

如图2-4所示

单片机上电 复位初始化

While无限循环

等待中断

键盘中断

键盘数据的处理

秒中断 对时间的处理,与LCD的显示控制 图2-4

2、电路元器件清单

低压电源 4.5V 导线 AT89C51 单片机 微动开关按钮 LCD1602显示器 NPN三极管 电阻 10K 滑动变阻器 10K 电容10uF 电容30pF 晶振12MHZ 若干 1 4 1 1 1 1 1 2 1 3、电子时钟C语言源程序

/***********************************

使用LCD1602与单片机实现的时钟与日期 显示年、月、日、时、分、秒(24小时制) 时间可调, 年份2000——9999 jiahuhenan

2012年10月9日

***********************************/ #include

7

/******全局变量的定义与设置******/ sbit key_mean=P1^0; //按键的定义 sbit key_ok =P1^1; sbit key_set =P1^2;

sbit RS =P1^5; //LCD控制端口 sbit RW =P1^6; sbit E =P1^7; sfr PORT =0xA0; //flag

char flag_sec=0; //值为20代表1s char flag_en_ok=0; char flag_en_key=0; //值为1表示键盘有效,否则无效

char flag_ok=0; //key_up与key_down的功能选择

char flag_mean=0; char flag_set=0; //key_up与key_down的功能标识

char flag_year_leap=0; //短语

//code char string_time[]= \ ? \\0\ code char string_year[]= \ ? \\0\ code char string_month[]= \ \\0\ code char string_mday[]= \ ? \\0\ code char string_week[]= \ ? \\0\ code char string_hour[]= \ ? \\0\ code char string_minute[]=\ \\0\ code char string_second[]=\ \\0\//年月日时分秒的定义 struct DATA_TIME { short year; //待选 char month; char mday ; char week ; char hour ; char minute; char second; }time;

struct time_char //time的字符型 {

char ch_year[4]; char ch_month[2];

8

char ch_mday[2]; char ch_week[1]; char ch_hour[2]; char ch_minute[2]; char ch_second[2]; }time_ch;

/***************子函数****************/ //LCD的延时程序 void LCD_delay(void) {

char i;

for(i=123;i>=0;i--); }

//向写指令函数

void wcmd(char cmd ) {

RS=0; RW=0; E=1;

LCD_delay(); PORT=cmd; LCD_delay(); E=0; }

//向LCD写数据函数 void wdata(char DATA) {

RS=1; RW=0; E=1;

LCD_delay(); PORT=DATA; LCD_delay(); E=0; }

//写字符串

void wstring(char *pt,char i)//i为字符的个数,不带\\0 {

char j;

for(j=0;j

9

{

wdata(pt[j]); } }

//时间数据的格式转换

void tran_2_ch(char *pt,char DATA) {

pt[0]=DATA/10+0x30;

pt[1]=DATA-pt[0]*10+0x10; }

void tran_4_ch(char *pt,int DATA) {

pt[0]=DATA/1000;

pt[1]=DATA/100-pt[0]*10;

pt[2]=DATA/10-pt[0]*100-pt[1]*10;

pt[3]=DATA-pt[0]*1000-pt[1]*100-pt[2]*10; pt[0]+=0x30; pt[1]+=0x30; pt[2]+=0x30; pt[3]+=0x30; }

//格式转换的实现 void tran_ch(void) {

tran_4_ch(time_ch.ch_year ,time.year ); tran_2_ch(time_ch.ch_month,time.month); tran_2_ch(time_ch.ch_mday ,time.mday );

//tran_2_ch(time_ch.ch_week ,time.week*10+1); time_ch.ch_week[0]=time.week+0x30; tran_2_ch(time_ch.ch_hour ,time.hour ); tran_2_ch(time_ch.ch_minute,time.minute); tran_2_ch(time_ch.ch_second,time.second); }

//是否是闰年

char leep_year(int year)//如果是闰年则flag_year_leep=1,否则=0 {

if((year@0==0)||year%4==0&&year0!=0)return 1; else return 0; }

//星期的判断

void de_week(void) {

int i,j,day=0; char mweek;

10


单片机电子钟实训报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:衡阳市承接产业转移的调查与思考

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: