IMG_20190727_104416.jpg (690.57 KB, 下載次數: 47)
下載附件
2019-7-27 10:45 上傳
- #include "reg52.h"
- typedef unsigned char uchar;
- typedef unsigned int uint;
- typedef unsigned long ulong;
- //顯示
- uchar code wen[];
- uchar code du[];
- uchar code mao_hao[];
- uchar code num0[];
- uchar code num1[];
- uchar code num2[];
- uchar code num3[];
- uchar code num4[];
- uchar code num5[];
- uchar code num6[];
- uchar code num7[];
- uchar code num8[];
- uchar code num9[];
- /*uchar code numA[];
- uchar code numB[];
- uchar code numC[];
- uchar code numD[];
- uchar code numE[];
- uchar code numF[];*/
- uchar code shi[];
- uchar code du[];
- sbit cs=P1^1;
- sbit reset=P1^0;
- sbit rs=P3^0;
- sbit sclk=P3^1;
- sbit sid=P3^2;
- // 延時
- void delay(ulong i)
- {
- ulong j;
- uint k;
- for(j=0;j<i;j++)
- for(k=0;k<110;k++);
- }
- //數據命令
- void pen(uchar data1)
- {
- uint i;
- cs=0;
- rs=1;
- for(i=0;i<8;i++)
- {
- sclk=0;
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=1;
- data1<<=1;
- }
- cs=1;
- }
- //指令命令
- void tan(uchar data1)
- {
- uint i;
- cs=0;
- rs=0;
- for(i=0;i<8;i++)
- {
- sclk=0;
- if(data1&0x80) sid=1;
- else sid=0;
- sclk=1;
- data1<<=1;
- }
- cs=1;
- }
- //調用漢字
- void dis_1616(uchar page,uchar lie,uchar *dp)
- {
- uchar i;
- uint j;
- for(j=0;j<2;j++)
- {
- tan(0xb0+page+j);//設計頁地址
- tan(0x10+((lie>>4)&0x0f)); //設計列高四位
- tan(0x00+(lie&0x0f)); //設計列低四位
- for(i=0;i<16;i++)
- {
- pen(*dp);
- dp++;
- }
- }
- }
- //調用數字
- void dis_816(uchar page,uchar lie,uchar *dp)
- {
- uchar i;
- uint j;
- for(j=0;j<2;j++)
- {
- tan(0xb0+page+j);//設計頁地址
- tan(0x10+((lie>>4)&0x0f)); //設計列高四位
- tan(0x00+(lie&0x0f)); //設計列低四位
- for(i=0;i<8;i++)
- {
- pen(*dp);
- dp++;
- }
- }
- }
- //顯示初始化
- void cshua()
- {
- reset=0;
- delay(100);
- reset=1;
- delay(100);
- tan(0xe2); //軟復位
- delay(10);
- tan(0x2f); //打開升壓VC,VS,VR
- delay(10);
- tan(0x23); //粗調對比度,0x20~0x27
- tan(0x81); //與下一條指令配套
- tan(0x20); //細調對比度,
- tan(0xa2); //偏壓設計,1/9
- tan(0xaf); //打開顯示
- }
- //顯示清屏
- void clear()
- {
- uchar i;
- uint j;
- for(j=0;j<8;j++)
- {
- tan(0xb0+j);//設計頁地址
- tan(0x10); //設計列高四位
- tan(0x00); //設計列低四位
- for(i=0;i<128;i++)
- {
- pen(0x00);
- }
- }
- }
- //調用圖像
- void clear1(uchar *dp)
- {
- uchar i;
- uint j;
- for(j=0;j<8;j++)
- {
- tan(0xb0+j);//設計頁地址
- tan(0x10); //設計列高四位
- tan(0x00); //設計列低四位
- for(i=0;i<128;i++)
- {
- pen(*dp);
- dp++;
- }
- }
- }
- sbit P2_0=P2^0;
- uchar U8FLAG; //判斷是否發送對應時間的輔助變量
- uchar U8count,U8temp;
- uchar U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
- uchar U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
- uchar U8comdata;
- uchar count, count_r=0;
- uchar str[5]={"RS232"};
- uchar outdata[5]; //定義發送的字節數
- uchar indata[5]; //定義接收的字節數
- //發送到串口
- SendData(uchar *dp)
- {
- uchar i;
- for(i=0;i<5;i++)
- {
- outdata[i]=dp[i];
- }
- count = 1;
- SBUF=outdata[0]; //為了進入發送程序
- }
- /*SendData(uchar *a)
- {
- outdata[0] = a[0];
- outdata[1] = a[1];
- outdata[2] = a[2];
- outdata[3] = a[3];
- outdata[4] = a[4];
- count = 1;
- SBUF=outdata[0];
- } */
- //延時
- void Delay1(uint j)
- {
- uchar i;
- uchar x;
- for(x=j;j>0;j--)
- {
- for(i=0;i<27;i++);
- }
- }
- //延時10us
- void Delay_10us(void)
- {
- uchar i;
- i--;
- i--;
- i--;
- i--;
- i--;
- i--;
- }
- //解碼數據
- void COM()
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- U8FLAG=2;
- while((!P2_0)&&(U8FLAG++)); //判斷是否發送完50us的低電平
- Delay_10us();
- Delay_10us();
- Delay_10us();
- U8temp=0;
- if(P2_0) U8temp=1; //判斷數據是0還是1
- U8FLAG=2;
- while((P2_0)&&(U8FLAG++));
- if(U8FLAG==1) break; //超時跳出for循環
- U8comdata<<=1;
- U8comdata|=U8temp;
- }
- }
- //濕溫度讀取程序
- void RH()
- {
- //主機拉低18us
- P2_0=0;
- Delay1(180);
- //主機拉高20~40us
- P2_0=1;
- Delay_10us();
- Delay_10us();
- Delay_10us();
- Delay_10us();
- //主機設為輸入 電平拉高
- P2_0=1;
- //判斷是否為低電平,如果不為低電平則跳出
- if(!P2_0)
- {
- U8FLAG=2;
- while((!P2_0)&&(U8FLAG++)); //判斷是否發送完80us低電平
- U8FLAG=2;
- while((P2_0)&&(U8FLAG++)); //判斷是否發送完80us高電平
- //數據接收狀態
- COM();
- U8RH_data_H_temp=U8comdata; //----溫度高8位
- COM();
- U8RH_data_L_temp=U8comdata; //----溫度低8位
- COM();
- U8T_data_H_temp=U8comdata; //----濕度高8位
- COM();
- U8T_data_L_temp=U8comdata; //----濕度低8位
- COM();
- U8checkdata_temp=U8comdata; //----校驗 8位
- P2_0=1; //數據校驗
- U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
- if(U8temp==U8checkdata_temp)
- {
- U8RH_data_H=U8RH_data_H_temp; //----溫度高8位== U8T_data_H------
- U8RH_data_L=U8RH_data_L_temp; //----溫度低8位== U8T_data_L------
- U8T_data_H=U8T_data_H_temp; //----濕度高8位== U8RH_data_H-----
- U8T_data_L=U8T_data_L_temp; //----濕度低8位== U8RH_data_L-----
- U8checkdata=U8checkdata_temp; //----校驗 8位 == U8checkdata-----
- }
- }
- }
- void init1()
- {
- TMOD=0X20;
- TH1=253;
- TL1=253; //波特率9600
- TR1=1;
-
- TI=0;
- RI=0;
- SM0=0;
- SM1=1; //選擇串口工作方式
- EA=1;
- ES=1; //串口中斷允許位,用于串口收發中斷
- REN=1; //允許串口接收
- }
- void main()
- {
- uchar i,j;
- init1();
- SendData(str); //發送到串口
- Delay1(1); //延時100US(12M晶振)
- while(1)
- {
- //調用溫濕度讀取子程序
- RH();
- str[0]=U8RH_data_H;
- str[1]=U8RH_data_L;
- str[2]=U8T_data_H;
- str[3]=U8T_data_L;
- str[4]=U8checkdata;
- SendData(str); //發送到串口
- Delay1(20000); //讀取模塊數據周期不易小于 2S
- ES=0;
- cshua();
- clear();
- tan(0xc8);
- tan(0xa0);
- i=U8RH_data_H;
- j=i*0.5;
-
- dis_1616(0,0,wen);
- delay(10);
- dis_1616(0,16,du);
- delay(10);
- dis_1616(0,32,mao_hao);
- delay(10);
- switch(j/10)
- {
- case(0) :dis_816(0,40,num0);break;
- case(1) :dis_816(0,40,num1);break;
- case(2) :dis_816(0,40,num2);break;
- case(3) :dis_816(0,40,num3);break;
- case(4) :dis_816(0,40,num4);break;
- case(5) :dis_816(0,40,num5);break;
- case(6) :dis_816(0,40,num6);break;
- case(7) :dis_816(0,40,num7);break;
- case(8) :dis_816(0,40,num8);break;
- case(9) :dis_816(0,40,num9);break;
- }
- delay(10);
- switch(j%10)
- {
- case(0) :dis_816(0,48,num0);break;
- case(1) :dis_816(0,48,num1);break;
- case(2) :dis_816(0,48,num2);break;
- case(3) :dis_816(0,48,num3);break;
- case(4) :dis_816(0,48,num4);break;
- case(5) :dis_816(0,48,num5);break;
- case(6) :dis_816(0,48,num6);break;
- case(7) :dis_816(0,48,num7);break;
- case(8) :dis_816(0,48,num8);break;
- case(9) :dis_816(0,48,num9);break;
- }
- delay(10);
- }
- }
- void RSINTR() interrupt 4 using 2
- {
- /* uchar InPut3;
- if(TI==1) //發送中斷
- {
- TI=0;
- if(count!=5) //發送完5位數據
- {
- SBUF= outdata[count];
- count++;
- }
- }
- if(RI==1) //接收中斷
- {
- InPut3=SBUF;
- indata[count_r]=InPut3;
- count_r++;
- RI=0;
- if (count_r==5)//接收完4位數據
- {
- //數據接收完畢處理。
- count_r=0;
- str[0]=indata[0];
- str[1]=indata[1];
- str[2]=indata[2];
- str[3]=indata[3];
- str[4]=indata[4];
- P0=0; //
- }
- } */
- uchar input; //暫時存放接收數據
- uchar i;
- if(TI==1) //發送中斷
- {
- TI=0;
- if(count!=5)
- {
- SBUF=outdata[count];
- count++;
- }
- }
- if(RI==1) //接收中斷
- {
- input=SBUF;
- indata[count_r]=input;
- count_r++;
- if(count_r==5)
- {
- count=0;
- for(i=0;i<5;i++)
- {
- str[i]=indata[i];
- }
- }
- }
- }
- uchar code wen[]={/*-- 文字: 溫 --*/
- /*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
- 0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
- };
- uchar code du[]={
- /*-- 文字: 度 --*/
- /*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
- 0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,
- };
- uchar code mao_hao[]={ /*-- 文字: : --*/
- /*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- uchar code num0[]={ /*-- 文字: 0 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00 };
- uchar code num1[]={ /*-- 文字: 1 --*//*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00 };
- uchar code num2[]={ /*-- 文字: 2 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00 };
- uchar code num3[]={ /*-- 文字: 3 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00 };
- uchar code num4[]={ /*-- 文字: 4 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00 };
- uchar code num5[]={ /*-- 文字: 5 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00 };
- uchar code num6[]={ /*-- 文字: 6 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00 };
- uchar code num7[]={ /*-- 文字: 7 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00 };
- uchar code num8[]={ /*-- 文字: 8 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00 };
- uchar code num9[]={ /*-- 文字: 9 --*/ /*-- 宋體 12; 此字體下對應的點陣為:寬 x 高=8x16 --*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00 };
- uchar code shi[]={
- /*-- 文字: 濕 --*/
- /*-- Arial Rounded MT Bold12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
- 0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00,
- };
- /*uchar code numA[]={0xE0,0xF0,0x98,0x8C, 0x98,0xF0,0xE0,0x00, 0x0F,0x0F,0x00,0x00, 0x00,0x0F,0x0F,0x00, //-A-
- };
- uchar code numB[]={0x04,0xFC,0xFC,0x44, 0x44,0xFC,0xB8,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0F,0x07,0x00, //-B-
- };
- uchar code numC[]={0xF0,0xF8,0x0C,0x04, 0x04,0x0C,0x18,0x00, 0x03,0x07,0x0C,0x08, 0x08,0x0C,0x06,0x00, //-C-
- };
- uchar code numD[]={0x04,0xFC,0xFC,0x04, 0x0C,0xF8,0xF0,0x00, 0x08,0x0F,0x0F,0x08, 0x0C,0x07,0x03,0x00, //-D-
- };
- uchar code numE[]={0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0C,0x0E,0x00, //-E-
- };
- uchar code numF[]={0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x00,0x00,0x00,0x00, //-F-
- }; */
復制代碼 |