在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)
|