还没看,应该很好 |
谢谢分享 |
真乃神人也。 |
看看![]() |
下面是主程序:
#include <config.h> //外部函数 //-------------------delay.c-------------------------------- extern void delay(unsigned int delay_time); //延时子程序 //------------------LPH7366.c-------------------------------- #define COM 0 //指令 #define DAT 1 //数据 #define STR 1 //字符 extern void LPH7366_init(); //LPH7366初始化 extern void LPH7366_flash(unsigned int delay_time); //LPH7366闪屏函数 extern void LPH7366_write(unsigned char type,unsigned char in_data); //LPH7366写函数 extern void LPH7366_clr(); //显示屏幕清屏 extern void LPH7366_write_str(unsigned char line,unsigned char row,unsigned char str); extern void LPH7366_write_han(unsigned char symbol_line,unsigned char symbol_row,unsigned char han); extern void LPH7366_write_doc(unsigned char symbol_line,unsigned char symbol_row,unsigned char doc); extern void data_tick(unsigned char i_data); //数据拆分函数 extern unsigned char row(unsigned char stye,unsigned char i); //计算屏幕的列地址 类型 extern unsigned char ge,shi; //数据拆分 extern bit data_flag; //是否动态显示数据标志位 0:不动态 1:动态 //------------------------time.c-------------------------------- extern void time_init(); //时间初始化 extern struct time { unsigned char hour; unsigned char minute; unsigned char second; }local_time,alarm_time,temp_time; extern bit second_flag; //秒信号标志 //------------------------温度图.c------------------------------ extern void pic_temp(); //温度主画面 extern void pic_temp_face_move(); //脸部表情选择 extern unsigned char face_flag; //人脸表情标志位 1:笑脸 2:闭嘴 3:苦恼 4:讲话 5:伤心 6:惊讶 7:沉默 //-------------DS18B20.C------------------- extern void DS18B20_init(); //DS18B20初始化 extern void DS18B20_send(unsigned char in_data); //DS18B20发送数据 extern void ReadTemperature(); //DS18B20读取温度转换好的数据 extern void temp_data_turn(float in_data); //DS18B20读取温度转换 extern bit T_sign; //温度正负符号 extern float temp; //转换好的温度数值 extern unsigned char t_bai,t_shi,t_ge,t_feng; //温度转换好的各个位 extern signed char temp_TH,temp_TL; //------------DS18B20控制命令----------------------------- #define T_CONVER 0x44 //开始温度转换 #define T_CONFIG 0x5f //11位转换 #define T_READ 0xbe //读暂存器 #define T_WRITE 0x4e //写暂存器 #define T_ROM_JMP 0xcc //忽略64ROM地址 #define T_COPY_E2 0x48 //将温度上下限数值写到E2ROM #define T_RECALL_E2 0xb8 //将E2中存储的温度上下限数值复制到上下限寄存器中。 #define T_cont 0.0625 //温度转换常数 //---------------keyB.c--------------------------- extern key_main(); //主键盘 //------------------------------------------------ //内部函数 void time_move(); //时间部分动画 void temp_move(); //温度部分动画 void temp_display(); //温度显示 void temp_bar_move(); //温度条部分动画 void data_clr(); //行33-58清零函数 void tick_time_temp(); //检查设置参数 bit sign_cross=0; //正负符号交叉标志位 bit ring_flag=1; unsigned char alarm_tick_time=0; sbit LED=P1^5; sbit SPK=P1^6; unsigned char temp_bar[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; void main() { LPH7366_init(); //显示屏幕初始化 LPH7366_clr(); //屏幕白屏 time_init(); //定时器0初始化 pic_temp(); LPH7366_write_str(1,4,'j'); LPH7366_write_str(1,5,'i'); LPH7366_write_str(1,6,'a'); LPH7366_write_str(1,7,'n'); LPH7366_write_str(1,8,'h'); LPH7366_write_str(1,9,'u'); LPH7366_write_str(1,10,'i'); LPH7366_write_han(2,1,0); LPH7366_write_han(2,2,1); LPH7366_write_doc(4,25,0x36); LPH7366_write_doc(4,26,0x36); time_init(); //定时器0初始化 while(1) //温度图动画部分 { data_flag=1; pic_temp_face_move(); //人脸表情 time_move(); //时间部分动画 temp_move(); //温度部分动画 temp_bar_move(); //温度条部分动画 key_main(); //主键盘 tick_time_temp(); //查询各个参数是否到了设定数值 if(temp_TL<temp&&temp<temp_TH) { face_flag=1; } } } void time_move() { data_tick(local_time.hour); LPH7366_write_str(6,1,(shi+16)); LPH7366_write_str(6,2,(ge+16)); if(second_flag==1) LPH7366_write_str(6,3,26); // else LPH7366_write_str(6,3,0); // data_tick(local_time.minute); LPH7366_write_str(6,4,(shi+16)); LPH7366_write_str(6,5,(ge+16)); if(second_flag==1) LPH7366_write_str(6,6,26); else LPH7366_write_str(6,6,0); // data_tick(local_time.second); LPH7366_write_str(6,7,(shi+16)); LPH7366_write_str(6,8,(ge+16)); if(ring_flag==1) { LPH7366_write_str(6,9,0x00); LPH7366_write_str(6,10,10); } else { LPH7366_write_str(6,9,0x00); LPH7366_write_str(6,10,0); } } void temp_move() { data_flag=1; //动态显示 ReadTemperature(); //读温度 temp_data_turn(temp); //转换温度数值 temp_display(); } void temp_display() { if(T_sign==0) //正数 { if(sign_cross==1) { data_clr(); sign_cross=0; } if(t_bai!=0) { LPH7366_write_str(4,5,(t_bai+16)); LPH7366_write_str(4,6,(t_shi+16)); LPH7366_write_str(4,7,(t_ge+16)); LPH7366_write_doc(4,46,0x01); //C LPH7366_write_doc(4,47,0x3c); LPH7366_write_doc(4,48,0x42); LPH7366_write_doc(4,49,0x42); LPH7366_write_doc(4,50,0x42); } else { LPH7366_write_str(4,5,(t_shi+16)); LPH7366_write_str(4,6,(t_ge+16)); LPH7366_write_doc(4,39,0x80); //小数点 LPH7366_write_str(4,7,(t_feng+16)); LPH7366_write_doc(4,46,0x01); //C LPH7366_write_doc(4,47,0x3c); LPH7366_write_doc(4,48,0x42); LPH7366_write_doc(4,49,0x42); LPH7366_write_doc(4,50,0x42); } } else //是负数 { if(sign_cross==0) { data_clr(); sign_cross=1; } if(t_bai!=0) { LPH7366_write_str(4,5,13); //负号 LPH7366_write_str(4,6,(t_bai+16)); LPH7366_write_str(4,7,(t_shi+16)); LPH7366_write_str(4,8,(t_ge+16)); LPH7366_write_doc(4,52,0x01); //C LPH7366_write_doc(4,53,0x3c); LPH7366_write_doc(4,54,0x42); LPH7366_write_doc(4,55,0x42); LPH7366_write_doc(4,56,0x42); } else { LPH7366_write_str(4,5,13); //负号 LPH7366_write_str(4,6,(t_shi+16)); LPH7366_write_str(4,7,(t_ge+16)); LPH7366_write_doc(4,45,0x80); //小数点 LPH7366_write_str(4,8,(t_feng+16)); LPH7366_write_doc(4,52,0x01); //C LPH7366_write_doc(4,53,0x3c); LPH7366_write_doc(4,54,0x42); LPH7366_write_doc(4,55,0x42); LPH7366_write_doc(4,56,0x42); } } } void temp_bar_move() { unsigned char k,i,n,j,l; k=(unsigned char)temp; i=k/8; //几行 n=k%8; //几小行 if(i>=0&&i<=5) { if(i>0) {for(j=5;j>(5-i);j--) { LPH7366_write_doc(j,80,temp_bar[7]); //正行全显 for(l=1;l<=(5-i);l++) //清除上面不显示的,主要是为了清楚以前残留显示 LPH7366_write_doc(l,80,0x00); } } if(n>0) //一行显示都不到 LPH7366_write_doc((5-i),80,temp_bar[n-1]); } LPH7366_write_doc(1,80,0x04); } void data_clr() { unsigned char i; for(i=33;i<59;i++) { LPH7366_write_doc(4,i,0x00); } } void tick_time_temp() { if(ring_flag==1) { if(alarm_time.hour==local_time.hour) { if(alarm_time.minute==local_time.minute) { if(local_time.second<30) { SPK=~SPK; face_flag=4; } else SPK=0; } } } if(temp_time.hour==local_time.hour) { if(temp_time.minute==local_time.minute) { temp_move(); face_flag=7; } } if(temp>(temp_TH+0.5)) { alarm_tick_time++; if(alarm_tick_time==10) { alarm_tick_time=0; LED=0; face_flag=6; } } if(temp<(temp_TL-0.5)) { alarm_tick_time++; if(alarm_tick_time==10) { alarm_tick_time=0; LED=~LED; face_flag=3; delay(2000); } } } |