时钟温度2 2.4寸彩屏显示

  • 彩屏
  • 建模太难了
  • LV3工程师
  • |      2017-06-22 20:09:13
  • 浏览量 720
  • 回复:5
时钟温度2 2.4寸彩屏显示 #include #include"ds1302.h" #include"9325tp.h" #include "18b20.h" /*----------------------------------------------- 全局变量 -----------------------------------------------*/ #define TOP 10 #define BOTTOM 10 #define LEFT 15 #define RIGHT 10 #define DISTANCE 20 #define CCOLOR 0xffff //前景色 #define BCOLOR 0x0000 //背景色 unsigned int temp; //温度临时变量 unsigned char TempH,TempL; bit SetFlag; //更新时间标志位 unsigned char time_buf2; unsigned char timeold; /*----------------------------------------------- 函数声明 -----------------------------------------------*/ void disp(void); /*------------------------------------------------ 串口通讯初始化 ------------------------------------------------*/ void UART_Init(void) { SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 ES = 1; //打开串口中断 } /*------------------------------------------------ 主函数 ------------------------------------------------*/ main() { unsigned char i; UART_Init(); Ds1302_Init(); /*DS302初始化函数*/ ILI9325_Initial(); //初始化LCD CLR_Screen(BCOLOR); //用背景色清屏 //绘制矩形平面 Show_RGB(LEFT,LEFT+100,TOP,TOP+140,0xff00); Show_RGB(LEFT+120,LEFT+220,TOP,TOP+140,0x00ff); Show_RGB(LEFT,LEFT+100,TOP+160,TOP+300,0x0ff0); Show_RGB(LEFT+120,LEFT+220,TOP+160,TOP+300,0xf00f); //画矩形框 Rectangle(LEFT,TOP,LEFT+100,TOP+140,CCOLOR); Rectangle(LEFT+1,TOP+1,LEFT+99,TOP+139,CCOLOR); LCD_PutString(LEFT+10,TOP+10,"当前日期:",CCOLOR,BCOLOR); LCD_PutString(LEFT+10,DISTANCE*2+TOP+10,"当前时间:",CCOLOR,BCOLOR); LCD_PutString(LEFT+10,DISTANCE*4+TOP+10,"星期",CCOLOR,BCOLOR); LCD_PutString(LEFT+10,DISTANCE*5+TOP+12,"温度: ℃",CCOLOR,BCOLOR); //画中间间隔线 Line(LEFT,TOP+DISTANCE+8,LEFT+100,TOP+DISTANCE+8,CCOLOR); Line(LEFT,TOP+DISTANCE*2+8,LEFT+100,TOP+DISTANCE*2+8,CCOLOR); Line(LEFT,TOP+DISTANCE*3+8,LEFT+100,TOP+DISTANCE*3+8,CCOLOR); Line(LEFT,TOP+DISTANCE*4+8,LEFT+100,TOP+DISTANCE*4+8,CCOLOR); Line(LEFT,TOP+DISTANCE*5+8,LEFT+100,TOP+DISTANCE*5+8,CCOLOR); while(1) { timeold=time_buf1; // 用于检查时钟是否改变 Ds1302_Read_Time();//读取时钟信息 if(timeold!=time_buf1) { temp=ReadTemperature();//读取温度 TempH=temp>>4; TempL=temp&0x0F; TempL=TempL*6/10;//小数近似处理 disp(); //液晶显示时间信息 } if(SetFlag) //如果接收到串口信息则更新时钟 { for(i=0;i<8;i++) { time_buf1=time_buf2*10+time_buf2;//数据整合,如2个数 1和5整合成15 } Ds1302_Write_Time(); SetFlag=0; //时钟信息更新后标志位清零 } } } /*------------------------------------------------ 串口中断程序 ------------------------------------------------*/ void UART_SER (void) interrupt 4 //串行中断服务程序 { unsigned char Temp; //定义临时变量 unsigned char i; if(RI) //判断是接收中断产生 { RI=0; //标志位清零 Temp=SBUF; //读入缓冲区的值 time_buf2=Temp&0x0F; i++; if(i==16) //连续接收16个字符信息 { i=0; SetFlag=1; //接收完成标志位置1 } SBUF=Temp; //把接收到的值再发回电脑端 } if(TI) //如果是发送标志位,清零 TI=0; } /*------------------------------------------------ 显示处理函数 ------------------------------------------------*/ void disp(void) { unsigned char TempData; TempData='2'; TempData='0'; TempData='0'+time_buf1/10; TempData='0'+time_buf1%10; TempData='-'; TempData='0'+time_buf1/10; TempData='0'+time_buf1%10; TempData='-'; TempData='0'+time_buf1/10; TempData='0'+time_buf1%10; LCD_PutString(LEFT+10,DISTANCE+TOP+10,TempData,CCOLOR,BCOLOR); TempData='0'+time_buf1/10; TempData='0'+time_buf1%10; TempData=':'; TempData='0'+time_buf1/10; TempData='0'+time_buf1%10; TempData=':'; TempData='0'+time_buf1/10; TempData='0'+time_buf1%10; TempData=' '; TempData=' '; LCD_PutString(LEFT+10,DISTANCE*3+TOP+10,TempData,CCOLOR,BCOLOR); switch(time_buf1) { case 1:LCD_PutString(LEFT+42,DISTANCE*4+TOP+10,"一",CCOLOR,BCOLOR);break; case 2:LCD_PutString(LEFT+42,DISTANCE*4+TOP+10,"二",CCOLOR,BCOLOR);break; case 3:LCD_PutString(LEFT+42,DISTANCE*4+TOP+10,"三",CCOLOR,BCOLOR);break; case 4:LCD_PutString(LEFT+42,DISTANCE*4+TOP+10,"四",CCOLOR,BCOLOR);break; case 5:LCD_PutString(LEFT+42,DISTANCE*4+TOP+10,"五",CCOLOR,BCOLOR);break; case 6:LCD_PutString(LEFT+42,DISTANCE*4+TOP+10,"六",CCOLOR,BCOLOR);break; case 7:LCD_PutString(LEFT+42,DISTANCE*4+TOP+10,"日",CCOLOR,BCOLOR);break; default:break; } TempData='0'+(TempH%100)/10; TempData='0'+(TempH%100)%10; //这里只使用2位整数部分 LCD_PutString(LEFT+58,DISTANCE*5+TOP+12,&TempData,CCOLOR,BCOLOR); }
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:5
河南覅号 2017-08-23
赞一个了解一下
0   回复
举报
发布
15663844056 2017-08-15
66666666666666666
0   回复
举报
发布
爱纳咖啡 2017-07-20
为什么许多帖子都没了呢?
0   回复
举报
发布
qq1328512480 2017-06-23
辛苦啦,我们一起把协会弄得更好~
0   回复
举报
发布
我爱惊悚片 2017-06-22
辛苦分享。。。不过表情什么意思
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子