在51單片機的基礎上,通過12864顯示屏顯示MQ135測量的數據
單片機源程序如下:
- //#include <reg52.h>
- #include <string.h>
- #include <STC12C5A60S2.H>
- #define uchar unsigned char
- #define uint unsigned int
- unsigned char ge, shi, bai, qian,dian1,dian2;
- typedef unsigned char BYTE;
- typedef unsigned long adc32;
- BYTE ADC_DATA16;
- uchar table1[]={
- " "
- " 0. mg/m3 "
- " 甲醛含量: "
- " "};
- uchar code IC_DAT[];
- uchar code pic1[];
- uchar code pic2[];
- uchar code pic3[];
- uchar code IC_DAT[]={
- "智能甲醛凈化設備"
- " 15物聯網 "
- " "
- " 鄭禹臣 "
- };
- sbit RS = P0^7;
- sbit WRD = P0^6;
- sbit E = P0^5;
- sbit PSB = P0^5;
- sbit RES = P0^3;
- beep1 = 0x07;
- beep2 = 0xff;
- void TransferData(char data1,bit DI);
- void delayms(uint n);
- void delay(uint m);
- void lcd_mesg(uchar *adder1);
- void ADC_Init(void); //ADC初始化
- BYTE GetADCResult(BYTE ch); //獲取ADC通道的值
- void ShowResult(BYTE ch); //計算結果
- BYTE filtering(BYTE ch); //濾波
- void ADC_Init(void)
- {
- P1ASF = 0xff; //開啟ADC通道
- ADC_RES = 0; //復位
- ADC_CONTR = 0x88;
- delay(2);
-
- }
- BYTE GetADCResult(BYTE ch)
- {
- uchar V;
- ADC_CONTR = 0x88 | 0x00 | ch ;
- delay(1);
- while (!(ADC_CONTR & 0x10));
- ADC_CONTR &= ~0x10;
- V = ADC_RES << 2 | ADC_RESL;
- return V;
- }
- void ShowResult(BYTE ch)
- {
- P0 |= beep1;
- P2 |= beep2;
- ADC_DATA16 = GetADCResult(ch);
- ge = ADC_DATA16 % 10 + '0' ;
- shi = ADC_DATA16 / 10 % 10 + '0' ;
- bai = ADC_DATA16 / 100 % 10 + '0' ;
- qian = ADC_DATA16 / 1000% 10 + '0' ;
- table1[23] = ge;
- table1[22] = shi;
- table1[21] = bai;
-
- if(((shi >= 56)&&(ge >= 48))||(bai == 49))
- {
- P0 &= ~beep1;
- P2 &= ~beep2;
- }
- }
- /********************************************************************
- * 名稱 : Convert(uchar In_Date)
- * 功能 : 因為電路設計時,P0.0--P0.7接法剛好了資料中的相反,所以設計該函數。
- * 輸入 : 1602資料上的值
- * 輸出 : 送到1602的值
- ***********************************************************************/
- unsigned char Convert(unsigned char In_Date)
- {
- unsigned char i, Out_Date = 0, temp = 0;
- for(i=0; i<8; i++)
- {
- //temp = (In_Date >> i) & 0x01;
- //Out_Date |= (temp << (7 - i));
- Out_Date= In_Date;
- }
- return Out_Date;
- }
- void initinal(void) //LCD字庫初始化程序
- {
- delay(40); //大于40MS的延時程序
- PSB=1; //設置為8BIT并口工作模式
- delay(1); //延時
- RES=0; //復位
- delay(1); //延時
- RES=1; //復位置高
- delay(10);
- TransferData(0x30,0); //Extended Function Set :8BIT設置,RE=0: basic instruction set, G=0 :graphic display OFF
- delay(100); //大于100uS的延時程序
- TransferData(0x30,0); //Function Set
- delay(37); ////大于37uS的延時程序
- TransferData(0x08,0); //Display on Control
- delay(100); //大于100uS的延時程序
- TransferData(0x10,0); //Cursor Display Control光標設置
- delay(100); //大于100uS的延時程序
- TransferData(0x0C,0); //Display Control,D=1,顯示開
- delay(100); //大于100uS的延時程序
- TransferData(0x01,0); //Display Clear
- delay(10); //大于10mS的延時程序
- TransferData(0x06,0); //Enry Mode Set,光標從右向左加1位移動
- delay(100); //大于100uS的延時程序
- }
- /********************************************************************
- * 名稱 : Main()
- * 功能 : 主函數
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void main(void)
- {
- ADC_Init();
- initinal(); //調用LCD字庫初始化程序
- delayms(240);
- while(1)
- {
- // initinal();
- // initina2(); //調用LCD顯示圖片(擴展)初始化程序
-
- // link(table1,GetADCResult(1));
- // TransferData(ADC_DATA16,1);
- // DisplayGraphic(pic2); //顯示圖片2
- ShowResult(1);
- // delay(100); //大于100uS的延時程序
- lcd_mesg(table1); //顯示中文漢字1
- delayms(100);
- // initinal(); //調用LCD字庫初始化程序
- // delay(100); //大于100uS的延時程序
- // lcd_mesg(IC_DAT2); //顯示中文漢字2
- // delayms(240);
- // delayms(240);
- // initinal();
- }
- }
- /********************************************************************
- * 名稱 : Main()
- * 功能 : 主函數
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void lcd_mesg(uchar *adder1)
- {
- unsigned char i;
- TransferData(0x80,0); //Set Graphic Display RAM Address
- delay(100);
- for(i=0;i<32;i++)
- {
- TransferData(*adder1,1);
- adder1++;
- }
- TransferData(0x90,0); //Set Graphic Display RAM Address
- delay(100);
- for(i=32;i<64;i++)
- {
- TransferData(*adder1,1);
- adder1++;
- }
- }
- /********************************************************************
- * 名稱 : Main()
- * 功能 : 主函數
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void TransferData(char data1,bit DI) //傳送數據或者命令,當DI=0是,傳送命令,當DI=1,傳送數據.
- {
- WRD=0;
- RS=DI;
- delay(1);
- P2=Convert(data1);
- E=1;
- delay(1);
- E=0;
- }
- /********************************************************************
- * 名稱 : Main()
- * 功能 : 主函數
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void delayms(unsigned int n) //延時10×n毫秒程序
- {
- unsigned int i,j;
- for(i=0;i<n;i++)
- for(j=0;j<2000;j++);
- }
- /********************************************************************
- * 名稱 : Main()
- * 功能 : 主函數
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void delay(unsigned int m) //延時程序
- {
- unsigned int i,j;
- for(i=0;i<m;i++)
- for(j=0;j<10;j++);
- }
復制代碼
所有資料51hei提供下載:
momo.rar
(54.05 KB, 下載次數: 40)
2018-11-27 16:56 上傳
點擊文件名下載附件
源碼 下載積分: 黑幣 -5
|