流程图3:调时功能流程图
3.2 程序设计
#include
void delay(uint z) //延时函数 {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void di( ) //蜂鸣器报警声音 {
beep=0; delay(100); beep=1; }
void write_com(uchar com) //写液晶命令函数
{ rs=0; lcden=0; P0=com; delay(3); lcden=1; delay(3); lcden=0; }
void write_data(uchar data) //写液晶数据函数 {
rs=1; lcden=0; P0=data; delay(3); lcden=1; delay(3); lcden=0; }
void init( ) //初始化函数 {
uchar num;
EA=1; //打开总中断 EX1=1; //开外部中断1
IT1=1; //设置负跳变沿触发中断 flag1=0; //变量初始化 t0_num=0; s1num=0; week=1;
dula=0; //关闭数码管显示 wela=0; lcden=0; rd=0;
/*以下几行在首次设置DS12C887时使用,以后不必再写入 write_ds(0x0A,0x20); //打开振荡器
write_ds(0x0B,0x26); //设置24小时模式,数据二进制格式,开启闹铃中断 set_time( ); //设置上电默认时间
-----------------------------------------------------------------------------*/ write_com(0x38); //1602液晶初始化 write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80);
for(num=0;num<15;num++) //写入液晶固定部分显示
{
write_data(table[num]); delay(1); }
write_com(0x80+0x40); for(num=0;num<11;num++) {
write_data(table1[num]); delay(1); } }
void write_sfm(uchar add,char data)
{ //1602液晶刷新时分秒函数,4为时,7为分,10为秒 char shi,ge; shi=data/10; ge=data;
write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); }
void write_nyr(uchar add,char data)
{ //1602液晶刷新年月日函数,3为年,6为月,9为日 char shi,ge; shi=data/10; ge=data;
write_com(0x80+add); write_data(0x30+shi); write_data(0x30+ge);
void write_week(char we) //写液晶星期显示函数 {
write_com(0x80+12); switch(we) {
case 1: write_data('M');delay(5); write_data('O');delay(5); write_data('N'); break;
case 2: write_data('T');delay(5); write_data('U');delay(5); write_data('E'); break;
case 3: write_data('W');delay(5); write_data('E');delay(5); write_data('D');
相关推荐: