- #include<reg52.h>
- #include<intrins.h>
- #include "delay.h"
- #define uchar unsigned char
- #define uint unsigned int
-
- uchar code table2[]= " 氣象站 ";
- uchar code table3[]= "光照: ";
- uchar code table4[]= "風速: ";
- uchar code table5[]= "風向: ";
- uchar code table6[]= "溫度: ";
- uchar code table7[]= "濕度: ";
- uchar code table8[]= "土溫: ";
- uchar code table9[]= "土濕: ";
- uchar code table10[]="時: ";
- uchar code table11[]="天: ";
- uchar code table12[]="月: ";
- uchar code table13[]="年: ";
- uchar code table19[]=" 降雨量 ";
- sbit LCD_SID=P0^6;
- sbit LCD_SCLK=P0^5;
- sbit key1=P1^1; //確認
- sbit key2=P1^2; //按鍵減一
- sbit key3=P1^3; //按鍵加一
- sbit key4=P1^4; //返回
- uint guang,fengsu,fengxiang,wendu,wendu1,shidu,tuwen,tuwen1,tushi,yu_shi,yu_tian;//
- 實時數據
- long yu_yue,yu_nian;//實時數據
- uchar fanye;
- void sendbyte(unsigned char bbyte) //發送一個字節
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- LCD_SID=bbyte&0x80; //取出最高位
- LCD_SCLK=1;
- LCD_SCLK=0;
- bbyte<<=1; //左移
- }
- }
- /**1ms延時**/
- void delay_ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- void delay_s(uint s)
- {
- while(s--)
- delay_ms(1000);
- }
- void write(bit start, unsigned char ddata) //寫指令或數據
- {
- unsigned char start_data,Hdata,Ldata;
- if(start==0)
- start_data=0xf8; //寫指令
- else
- start_data=0xfa; //寫數據
-
- Hdata=ddata&0xf0; //取高四位
- Ldata=(ddata<<4)&0xf0; //取低四位
- sendbyte(start_data); //發送起始信號
- DelayMs(1); //延時是必須的
- sendbyte(Hdata); //發送高四位
- DelayMs(1); //延時是必須的
- sendbyte(Ldata); //發送低四位
- DelayMs(1); //延時是必須的
- }
- /**********一行顯示16個字母***********
- ***********英文數字顯示***************
- ***X為行Y為列,K為字的個數,*P為數組**
- *************************************/
- void english(uchar x,uchar y,uchar k,uchar *p)
- {
- uchar hang,out,i;
- y=y-1;
- switch(x)
- {
- case 1:hang=0x80;break;
- case 2:hang=0x90;break;
- case 3:hang=0x88;break;
- case 4:hang=0x98;break;
- }
- out=hang+y;
- write(0,out);
- for(i=0;i<k;i++) {
- write(1,*p);
- p++;
- }
- // write(1,p);
- }
- void display_start()
- {
- write(0,0x01);
- english(2,1,15,table2);//開始界面
- }
- void display1()
- {
- write(0,0x01);
- english(2,1,15,table3);//光照
- guang=1234;
- write(0,0x93);
- write(1,0x30+guang/10000);
- write(1,0x30+guang/1000%10);
- write(0,0x94);
- write(1,0x30+guang/100%10);
- write(1,0x30+guang/10%10);
- write(0,0x95);
- write(1,0x30+guang%10);
- write(1,0x30);
- write(0,0x96);
- write(1,0x20);
- write(1,0x4c);
- write(0,0x97);
- write(1,0x78);
- }
- void display2()
- {
- write(0,0x01);
- english(2,1,15,table4);//風速
- fengsu=1230;
- write(0,0x93);
- write(1,0x30+fengsu/1000);
- write(1,0x30+fengsu/100%10);
- write(0,0x94);
- write(1,0x2e);
- write(1,0x30+fengsu/10%10);
- write(0,0x95);
- write(1,0x30+fengsu%10);
- write(0,0x96);
- write(1,0x6d);
- write(1,0x2f);
- write(0,0x97);
- write(1,0x73);
- english(4,1,15,table5);//風向
- fengxiang=1800;
- write(0,0x9b);
- write(1,0x30+fengxiang/1000);
- write(1,0x30+fengxiang/100%10);
- write(0,0x9c);
- write(1,0x30+fengxiang/10%10);
- write(1,0x2e);
- write(0,0x9d);
- write(1,0x30+fengxiang%10);
- write(0,0x9e);
- write(1,0xa1);
- write(1,0xe3);
- }
- void display3()
- {
- write(0,0x01);
- english(2,1,15,table6);//空氣溫度
- wendu=120;
- //wendu=0xfff0;
- if(wendu<8000)
- {
- write(0,0x93);
- write(1,0x30+wendu/100);
- write(1,0x30+wendu/10%10);
- write(0,0x94);
- write(1,0x2e);
- write(1,0x30+wendu%10);
- write(0,0x96);
- write(1,0xa1);
- write(1,0xe6);
- }
- if(wendu>=8000)
- {
- wendu1=0xffff-wendu+1;
- write(0,0x93);
- write(1,0x2d);
- write(1,0x30+wendu1/100);
- write(0,0x94);
- write(1,0x30+wendu1/10%10);
- write(1,0x2e);
- write(0,0x95);
- write(1,0x30+wendu1%10);
- write(1,0x20);
- write(0,0x96);
- write(1,0xa1);
- write(1,0xe6);
- }
- english(4,1,15,table7);//空氣濕度
- shidu=120;
- write(0,0x9b);
- write(1,0x30+shidu/100);
- write(1,0x30+shidu/10%10);
- write(0,0x9c);
- write(1,0x2e);
- write(1,0x30+shidu%10);
- write(0,0x9e);
- write(1,0xa3);
- write(1,0xa5);
- }
- void display4()
- {
- write(0,0x01);
- english(2,1,15,table8);//土壤溫度
- //tuwen=120;
- tuwen=0xfff0;
- if(tuwen<8000)
- {
- write(0,0x93);
- write(1,0x30+tuwen/100);
- write(1,0x30+tuwen/10%10);
- write(0,0x94);
- write(1,0x2e);
- write(1,0x30+tuwen%10);
- write(0,0x96);
- write(1,0xa1);
- write(1,0xe6);
- }
- if(tuwen>=8000)
- {
- tuwen1=0xffff-tuwen+1;
- write(0,0x93);
- write(1,0x2d);
- write(1,0x30+tuwen1/100);
- write(0,0x94);
- write(1,0x30+tuwen1/10%10);
- write(1,0x2e);
- write(0,0x95);
- write(1,0x30+tuwen1%10);
- write(1,0x20);
- write(0,0x96);
- write(1,0xa1);
- write(1,0xe6);
- }
- english(4,1,15,table9);//土壤濕度
- tushi=210;
- write(0,0x9b);
- write(1,0x30+tushi/100);
- write(1,0x30+tushi/10%10);
- write(0,0x9c);
- write(1,0x2e);
- write(1,0x30+tushi%10);
- write(0,0x9e);
- write(1,0xa3);
- write(1,0xa5);
- }
- void display5()
- {
- write(0,0x01);
- english(1,1,15,table19);
- english(2,1,15,table10);//小時雨量
- yu_shi=120;
- write(0,0x92);
- write(1,0x30+yu_shi/100);
- write(1,0x30+yu_shi/10%10);
- write(0,0x93);
- write(1,0x2e);
- write(1,0x30+yu_shi%10);
- write(0,0x95);
- write(1,0x6d);
- write(1,0x6d);
- english(4,1,15,table11);//天雨量
- yu_tian=2100;
- write(0,0x9a);
- write(1,0x30+yu_tian/1000);
- write(1,0x30+yu_tian/100%10);
- write(0,0x9b);
- write(1,0x30+yu_tian/10%10);
- write(1,0x2e);
- write(0,0x9c);
- write(1,0x30+yu_tian%10);
- write(1,0x20);
- write(0,0x9d);
- write(1,0x6d);
- write(1,0x6d);
- }
- void display6()
- {
- write(0,0x01);
- english(1,1,15,table19);
- english(2,1,15,table12);//月雨量
- yu_yue=11110;
- write(0,0x92);
- write(1,0x30+yu_yue/10000);
- write(1,0x30+yu_yue/1000%10);
- write(0,0x93);
- write(1,0x30+yu_yue/100%10);
- write(1,0x30+yu_yue/10%10);
- write(0,0x94);
- write(1,0x2e);
- write(1,0x30+yu_yue%10);
- write(0,0x96);
- write(1,0x6d);
- write(1,0x6d);
- english(4,1,15,table13);//年雨量
- yu_nian=201422;
- write(0,0x9a);
- write(1,0x30+yu_nian/100000);
- write(1,0x30+yu_nian/10000%10);
- write(0,0x9b);
- write(1,0x30+yu_nian/1000%10);
- write(1,0x30+yu_nian/100%10);
- write(0,0x9c);
- write(1,0x30+yu_nian/10%10);
- write(1,0x2e);
- write(0,0x9d);
- write(1,0x30+yu_nian%10);
- write(0,0x9f);
- write(1,0x6d);
- write(1,0x6d);
- }
- void lcd_init()
- {
- write(0,0x30); //8 位介面,基本指令集
- write(0,0x0c); //顯示打開,光標關,反白關
- write(0,0x01); //清屏,將DDRAM的地址計數器歸零
- DelayMs(10);
- }
- void main()
- {
- lcd_init();
- DelayMs(100);
- display_start();
- while(1)
- {
- if(key3==0)
- {
- delay_ms(50);
- if(key3==0) //key3向右翻頁
- {
- if(fanye<6)
- {
- fanye++;
- }
- }
- while(!key3);
- if(fanye==1){display1();delay_ms(50);}
- if(fanye==2){display2();delay_ms(50);}
- if(fanye==3){display3();delay_ms(50);}
- if(fanye==4){display4();delay_ms(50);}
- if(fanye==5){display5();delay_ms(50);}
- if(fanye==6){display6();delay_ms(50);}
- }
- if(key2==0)
- {
- delay_ms(50);
- if(key2==0) //key2向左翻頁
- {
- if(fanye>0)
- {
- fanye--;
- }
- }
- while(!key2);
- if(fanye==6){display6();delay_ms(50);}
- if(fanye==5){display5();delay_ms(50);}
- if(fanye==4){display4();delay_ms(50);}
- if(fanye==3){display3();delay_ms(50);}
- if(fanye==2){display2();delay_ms(50);}
- if(fanye==1){display1();delay_ms(50);}
- if(fanye==0){display_start();delay_ms(50);}
- }
-
- }
- }
復制代碼
|