图5 显示模块 4.控制电路模块
控制电路包括发光二极管电路、蜂鸣器和继电器控制电路。
发光二极管通过一个K级限流电阻连接P2.6端口,当P2.6变为高电平时,发光二极管亮起。
蜂鸣器连接P2.5,由PNP三极管驱动,当三极管导通时蜂鸣器响起。
继电器连接P2.3,由PNP驱动,电平跳变时继电器吸合,开关拨到另一档,使继电器控制的发光二极管电路导通,发光二极管亮起。
图6 控制电路模块
5.总体电路
图7 总体电路 三、课程设计软件设计与流程图 软件如下:
#include
uchar code table[]=\ 2014-06-01 {rs=0; \定义初始上电时液晶默认 uchar code table1[]=\ lcden=0;
uchar code Alarm_0[]=\ P3=com; uchar code Alarm_1[]=\ delay(5); uchar code Alarm_2[]=\ lcden=1; uchar code Alarm_3[]=\ delay(5); uchar code Alarm_00[]=\ lcden=0; uchar code Alarm_11[]=\ } uchar code Alarm_22[]=\void write_date(uchar date)//液晶写数据 uchar code Alarm_33[]=\函数 uchar code deng[]=\{rs=1; sbit K1=P1^0;//五个按键 sbit K2=P1^1; lcden=0; sbit K3=P1^2; P3=date; sbit K4=P1^3; delay(5); sbit K5=P1^4; lcden=1; sbit rs=P2^0; delay(5); sbit rw=P2^1; lcden=0; sbit lcden=P2^2; } sbit LED2=P2^3;//灯光控制端 void write_nian(uchar add,uint date)//
年显示函数
{uchar qian,bai,shi,ge; qian=date/1000;
bai=(date-1000*qian)/100;
shi=(date-qian*1000-bai*100)/10; ge=date;
write_com(0x80+add); write_date(0x30+qian); write_date(0x30+bai); write_date(0x30+shi); write_date(0x30+ge); }
void write_yue(uchar add,uchar date)//月显示函数
{uchar shi,ge; shi=date/10; ge=date;
write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge); }
void write_ri(uchar add,uchar date)//日显示函数
{uchar shi,ge; shi=date/10; ge=date;
write_com(0x80+add); write_date(0x30+shi); write_date(0x30+ge); }
void write_sfm(uchar add,uchar date)//液晶写时分秒函数
{uchar shi,ge; shi=date/10; ge=date;
write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); }
void init()//初始化函数
{ uint num;//写液晶的循环控制变量 aa=0;//中断次数标志
K1num=0;//K1按键被按下的标记变量 K2num=0;//K2按键被按下的标记变量 K3num=0;//K3按键被按下的标记变量 K4num=0;//K4按键被按下的标记变量 K5num=0;
flag1=1;//控制lcd屏刷新的变量
flag2=1;//控制闹钟响闹开启关闭的标记
flag3=1;//控制闹钟响起时,按下K5停止闹钟响闹的标记
flag4=1;//进入闹钟设置时的标记变量 flag5=1;//进入时间设置时的标记变量 flag6=1;//控制闹钟亮起时,按下K5停止闹钟响闹的标记
nian=2014; yue=6; ri=1;
led=1;//发光二极管初始化 LED2=1;//广播初始化 LED3=0; rw=0;
N=100;//系统启动时,闹钟时间到发出的声音为连续三次发出“哗”的一声
miao=0;//系统初始化时间 fen=0; shi=8; fen1=1;//初始化闹钟的时间 shi1=8;
fen2=2;//初始化闹钟的时间 shi2=8;
fen3=3;//初始化闹钟的时间 shi3=8;
fen4=4;//初始化闹钟的时间 shi4=8;
beep=1;//蜂鸣器初始化
lcden=0;//液晶使能端初始化
write_com(0x38);//1602液晶初始化,设置16*2显示。5*7点阵,8位数据接口
write_com(0x0c);//设置开显示,不显示光
write_com(0x06);//写一个字符后地址指针自动加1
write_com(0x01);//显示清0数据指针清0
write_com(0x80);//将数据指针定位到第一行,第一个字处
for(num=0;num<15;num++)//显示闹钟标示 {write_date(table[num]); delay(10); }
write_com(0x80+0x40+11);//写出时间显示部分的两个冒号
write_date(':');
write_com(0x80+0x40+14); write_date(' ');
write_com(0x80+0x40+15); write_date(' ');
write_sfm(12,fen);//送去液晶显示秒分时
write_sfm(9,shi);
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;//定时器装初值
TL0=(65536-50000)%6; EA=1;//开总中断
ET0=1;//开定时器0中断 TR0=1; }
void xianshi()//系统时间显示 { write_com(0x80+0x40); for(i=0;i<9;i++)
write_date(table1[i]);
write_com(0x80+0x40+11);//写出时间显示部分的两个冒号
write_date(':');
write_com(0x80+0x40+14); write_date(' ');
write_com(0x80+0x40+15); write_date(' ');
write_sfm(12,fen);//送去液晶显示秒分时
write_sfm(9,shi); }
void time()//更改系统时间 {if((K1num==0)&&(flag3==1)) { write_com(0x80+0x40); for(i=0;i<9;i++)
write_date(table1[i]); }
if(K1==0)//判断K1按下,则开始修改时间 { delay(5); flag5=1; if(K1==0)
{K1num++; while(!K1); if(K1num==1) {TR0=0;
write_com(0x80+0x40+12); write_com(0x0f);//光标闪烁 }
if(K1num==2)
{write_com(0x80+0x40+9);} if(K1num==3)
{write_com(0x80+3);} if(K1num==4)
{write_com(0x80+8);} if(K1num==5)
{write_com(0x80+11);} if(K1num==6) {K1num=0; flag5=0;
write_com(0x0c);//取消光标闪 TR0=1;//启动定时器使时钟开始走 flag1=1; //flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值
write_com(0x80+0x40+11); write_date(':');
write_com(0x80+0x40+14); write_date(' ');
write_com(0x80+0x40+15); write_date(' '); } } }
if(K1num!=0) { if(K2==0) {delay(5); if(K2==0)
{while(!K2);//等待松手 if(K1num==1) {fen++;
if(fen==60) fen=0;
write_sfm(12,fen);
write_com(0x80+0x40+12); }
if(K1num==2) {shi++;
if(shi==24) shi=0;
write_sfm(9,shi);
write_com(0x80+0x40+9); }
if(K1num==3 ) {nian++;
write_nian(3,nian); write_com(0x80+3); } if(K1num==4) {yue++; if(yue==13) yue=1; write_yue(8,yue); write_com(0x80+8); } if(K1num==5) {ri++; if(ri==32) ri=1; write_ri(11,ri); write_com(0x80+11); }
if(K1num==6) {K1num=0; flag5=0;
write_com(0x0c);//取消光标闪
TR0=1;//启动定时器使时钟开始走 flag1=1; //flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值
write_com(0x80+0x40+11); write_date(':');
write_com(0x80+0x40+14); write_date(' ');
write_com(0x80+0x40+15); write_date(' '); } } }
if(K3==0) {delay(5); if(K3==0) {while(!K3); if(K1num==1) {fen--; if(fen==-1) fen=59; write_sfm(12,fen);
write_com(0x80+0x40+12); } if(K1num==2) { shi--; if(shi==-1) shi=23; write_sfm(9,shi); write_com(0x80+0x40+9); } if(K1num==3) {nian--; write_nian(3,nian); write_com(0x80+3); } if(K1num==4) {yue--; if(yue==0) yue=12; write_yue(8,yue); write_com(0x80+8); } if(K1num==5) {ri--; if(ri==0) ri=31; write_ri(11,ri); write_com(0x80+11); } if(K1num==6) {K1num=0;
flag5=0;
write_com(0x0c);//取消光标闪
TR0=1;//启动定时器使时钟开始走 flag1=1; //flag=1.则修改系统时间时液晶显示的系统时间值,flag=0,则为修改闹钟时间时,屏幕显示的是修改闹钟时间的值
write_com(0x80+0x40+11); write_date(':');
write_com(0x80+0x40+14);
相关推荐: