/****************************************************************************/ //头文件
#include #include
/*****************************************************************************/ //灯与蜂鸣器定义 sbit led_b = P2^7; sbit led_r = P1^4; sbit led_g1 = P1^3; sbit led_g2 = P1^2; sbit led_g3 = P1^0; sbit led_g4 = P1^1; sbit beep = P3^1;
/*****************************************************************************/ //温度传感器定义
sbit DQ = P3 ^ 0;//ds18B20
/*****************************************************************************/ //键盘引脚定义
sbit KEY_1 = P2^3; //左上 sbit KEY_2 = P2^4; //左下 sbit KEY_3 = P2^6; //右上 sbit KEY_4 = P2^5; //右下 sbit KEY_I = P3^2; //常0
/****************************************************************************/ //引脚定义
sbit SID = P2^1; //数据 sbit SCLK = P2^2; //时钟
/*****************************************************************************/ //定义DS1302时钟接口
sbit clock_clk = P3 ^ 5;//ds1302_clk(时钟线) sbit clock_dat = P3 ^ 4;//ds1302_dat(数据线) sbit clock_Rst = P3 ^ 3;//ds1302_Rst(复位线)
/*****************************************************************************/ //定义累加器A中的各位 sbit a0 = ACC ^ 0; sbit a1 = ACC ^ 1; sbit a2 = ACC ^ 2; sbit a3 = ACC ^ 3; sbit a4 = ACC ^ 4; sbit a5 = ACC ^ 5; sbit a6 = ACC ^ 6; sbit a7 = ACC ^ 7;
/****************************************************************************/ //定义全局变量
unsigned char yy,mo,dd,xq,hh,mm,ss;//定义时间映射全局变量(专用寄存器) bit w = 0; //调时标志位
static unsigned char menu = 0;//定义静态小时更新用数据变量 static unsigned char keys = 0;//定义静态小时更新用数据变量 static unsigned char timecount = 0;//定义静态软件计数器变量
/****************************************************************************/ void DelayM(unsigned int a){//延时函数 1MS/次 unsigned char i; while( --a != 0){ for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。 } //i 从0加到125,CPU大概就耗时1毫秒 }
/****************************************************************************/ //函数声明
void lcm_w_word(unsigned char *str) ; //写字符 例:lcm_w_word(\您好!\void lcm_w_test(bit start,unsigned char ddata); //(0,指令) (1,数据) void lcm_w_byte(unsigned char bbyte); //写一个字节给lcm void delaynms(unsigned int di); //延时 void lcm_init(void); //lcm初始化 void lcm_clr(void); //清屏
void days (viod) { //公历节日数据库 lcm_w_test(0,0x80); lcm_w_word(\ [Set]\ lcm_w_test(0,0x98); // ----|----------------| if ( mo == 0x01 && dd == 0x01 ){ lcm_w_word(\月 if ( mo == 0x01 && dd == 0x28 ){ lcm_w_word(\ 世界麻风日 \
if ( mo == 0x02 && dd == 0x02 ){ lcm_w_word(\ 世界湿地日 \2月 if ( mo == 0x02 && dd == 0x13 ){ lcm_w_word(\ 明天情人节了 \ if ( mo == 0x02 && dd == 0x14 ){ lcm_w_word(\ 今天是情人节 \
if ( mo == 0x03 && dd == 0x01 ){ lcm_w_word(\ 国际海豹日 \3月 if ( mo == 0x03 && dd == 0x03 ){ lcm_w_word(\ 全国爱耳日 \ if ( mo == 0x03 && dd == 0x08 ){ lcm_w_word(\ 3.8妇女节 \ if ( mo == 0x03 && dd == 0x12 ){ lcm_w_word(\ 植树节 \ if ( mo == 0x03 && dd == 0x14 ){ lcm_w_word(\ 国际警察日 \ if ( mo == 0x03 && dd == 0x15 ){ lcm_w_word(\ 消费者权益日 \ if ( mo == 0x03 && dd == 0x17 ){ lcm_w_word(\ 国际航海日 \ if ( mo == 0x03 && dd == 0x21 ){ lcm_w_word(\ 世界森林日 \
if ( mo == 0x03 && dd == 0x22 ){ lcm_w_word(\ 世界水日 \ if ( mo == 0x03 && dd == 0x23 ){ lcm_w_word(\ 世界气象日 \ if ( mo == 0x03 && dd == 0x24 ){ lcm_w_word(\世界防治结核病日\ if ( mo == 0x04 && dd == 0x01 ){ lcm_w_word(\愚人节 小心上当\4 if ( mo == 0x04 && dd == 0x07 ){ lcm_w_word(\ 世界卫生日 \ if ( mo == 0x04 && dd == 0x08 ){ lcm_w_word(\ 复活节 \ if ( mo == 0x04 && dd == 0x13 ){ lcm_w_word(\ 黑色星期五 \ if ( mo == 0x05 && dd == 0x01 ){ lcm_w_word(\ 劳动节 放假 \5 if ( mo == 0x05 && dd == 0x04 ){ lcm_w_word(\ 青年节 \ if ( mo == 0x05 && dd == 0x08 ){ lcm_w_word(\ 世界红十字日 \ if ( mo == 0x05 && dd == 0x12 ){ lcm_w_word(\ 国际护士节 \ if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word(\近日注意母亲节 \ if ( mo == 0x05 && dd == 0x15 ){ lcm_w_word(\ 国际家庭日 \if ( mo == 0x05 && dd == 0x31 ){ lcm_w_word(\ 世界无烟日 \ if ( mo == 0x06 && dd == 0x01 ){ lcm_w_word(\ 国际儿童节 \6 if ( mo == 0x06 && dd == 0x05 ){ lcm_w_word(\ 世界环境日 \ if ( mo == 0x06 && dd == 0x26 ){ lcm_w_word(\ 国际禁毒日 \ if ( mo == 0x06 && dd == 0x06 ){ lcm_w_word(\ 全国爱眼日 \ if ( mo == 0x06 && dd == 0x13 ){ lcm_w_word(\近日注意父亲节 \if ( mo == 0x06 && dd == 0x15 ){ lcm_w_word(\近日注意父亲节 \ if ( mo == 0x07 && dd == 0x01 ){ lcm_w_word(\香港回归记念日 \if ( mo == 0x07 && dd == 0x07 ){ lcm_w_word(\抗日战争记念日 \if ( mo == 0x07 && dd == 0x11 ){ lcm_w_word(\ 世界人口日 \if ( mo == 0x08 && dd == 0x01 ){ lcm_w_word(\ 八一建军节 \8 if ( mo == 0x08 && dd == 0x08 ){ lcm_w_word(\ 中国男子节 \if ( mo == 0x08 && dd == 0x15 ){ lcm_w_word(\抗战胜利记念日 \if ( mo == 0x09 && dd == 0x10 ){ lcm_w_word(\ 中国教师节 \9 if ( mo == 0x09 && dd == 0x18 ){ lcm_w_word(\九·一八事变记念\if ( mo == 0x09 && dd == 0x20 ){ lcm_w_word(\ 国际爱牙日 \if ( mo == 0x09 && dd == 0x27 ){ lcm_w_word(\ 世界旅游日 \if ( mo == 0x10 && dd == 0x01 ){ lcm_w_word(\ 中国国庆节 \if ( mo == 0x10 && dd == 0x04 ){ lcm_w_word(\ 世界动物日 \if ( mo == 0x10 && dd == 0x24 ){ lcm_w_word(\ 联合国日 \if ( mo == 0x10 && dd == 0x12 ){ lcm_w_word(\明天国际教师节 \if ( mo == 0x10 && dd == 0x13 ){ lcm_w_word(\ 国际教师节 \if ( mo == 0x11 && dd == 0x10 ){ lcm_w_word(\ 世界青年节 \
if ( mo == 0x11 && dd == 0x17 ){ lcm_w_word(\ 世界学生节 \if ( mo == 0x12 && dd == 0x01 ){ lcm_w_word(\ 世界艾滋病日 \if ( mo == 0x12 && dd == 0x23 ){ lcm_w_word(\ 明晚平安夜 \if ( mo == 0x12 && dd == 0x24 ){ lcm_w_word(\ 今晚平安夜 \if ( mo == 0x12 && dd == 0x25 ){ lcm_w_word(\ 圣诞快乐 \if ( mo == 0x12 && dd == 0x31 ){ lcm_w_word(\ 明日新年 \else{
if ( hh >= 0x04 && hh < 0x06 ){ lcm_w_word(\★★__▲▲__凌晨\ if ( hh >= 0x06 && hh < 0x08 ){ lcm_w_word(\☆○__▲△__早晨\ if ( hh >= 0x08 && hh < 0x12 ){ lcm_w_word(\●__▲▲__上午\ if ( hh == 0x12) { lcm_w_word(\▲●▲__中午\ if ( hh >= 0x13 && hh < 0x18 ){ lcm_w_word(\▲▲__●__下午\ if ( hh >= 0x18 && hh < 0x22 ){ lcm_w_word(\△▲__●☆__晚上\ if ( hh >= 0x22 && hh <= 0x23 ){ lcm_w_word(\△▲__★☆__夜里\ if ( hh >= 0x00 && hh < 0x04 ){ lcm_w_word(\★▲▲★__深夜\ } }
/****************************************************************************/ //初始化LCM
void lcm_init(void) {
delaynms(100); //启动等待,等LCM讲入工作状态 lcm_w_test(0,0x30); //8 位介面,基本指令集
lcm_w_test(0,0x0c); //显示打开,光标关,反白关
lcm_w_test(0,0x01); //清屏,将DDRAM的地址计数器归零 delaynms(100); //启动等待,等LCM讲入工作状态 }
/******************************************************************************/
//写指令或数据 (0,指令) (1,数据) void lcm_w_test(bit start, unsigned char ddata) { unsigned char start_data,Hdata,Ldata; if(start==0) start_data=0xf8; //0:写指令 else start_data=0xfa; //1:写数据
Hdata=ddata&0xf0; //取高四位 Ldata=(ddata<<4)&0xf0; //取低四位
lcm_w_byte(start_data); //发送起始信号 delaynms(5); //延时是必须的 lcm_w_byte(Hdata); //发送高四位 delaynms(5); //延时是必须的 lcm_w_byte(Ldata); //发送低四位 delaynms(5); //延时是必须的 }
/******************************************************************************/
//发送一个字节(底层函数)
void lcm_w_byte(unsigned char bbyte) { unsigned char i; for(i=0;i<8;i++){
SID=bbyte&0x80; //取出最高位 SCLK=1; SCLK=0;
bbyte<<=1; //左移 } }
/******************************************************************************/
//延时(LCM占用)
void delaynms(unsigned int di) { unsigned int da,db; for(da=0;da /*****************************************************************************/ //清屏函数 void lcm_clr(void){ lcm_w_test(0,0x01); delaynms(40); //启动等待,等LCM讲入工作状态 } /*****************************************************************************/ //向LCM发送一个字符串,长度64字符之内。 //应用:lcm_w_word(\您好!\ void lcm_w_word(unsigned char *str){ while(*str != '\\0'){ lcm_w_test(1,*str++);