附录2:系统设计部分源程序
#include\ //添加LCD1602头文件 #include\添加ADC0832头文件 //#include\
sbit BUZZER = P1^3; //蜂鸣器驱动端口==P1^2
sbit Reduc = P1^7; //按键键输入端口==P1^7 sbit Add = P3^0; //按键加输入端口==P3^1
sbit vled = P3^2;
void Delay1us(uint t) //@12MHz {
while(t--)_nop_(); }
uint read_data(uchar N) {
uint val=0; vled=0;
Delay1us(20); val=adc0832(N); vled=1;
Delay1us(400); return val; }
/************************************************ ** 函数名称 : void main(void) ** 函数功能 : 主函数 ** 输 入 : 无 ** 输 出 : 无 ** 说 明 :
************************************************/ void main(void) {
double PM,pm1,pm2;
int PMVAL=0,HPM=200,PM_count=0,pm1_count=0;
28
uchar bueezr_flag=0,bueezr_count=0,buzzer_time=25;//蜂鸣器报警变量 LCD_Init();
WriteChar(1,0,16,\ WriteChar(2,0,16,\while(1) { Delay(120); pm1+=read_data(1); if(++PM_count>=40) { PM_count=0; pm1=pm1/40; pm2+=pm1; if(++pm1_count>=3) { PM=pm2/3; PM=PM*50/255; PM-=4; PM/=5; PM*=1000; PMVAL=PM; PMVAL+=235; if(PMVAL>=9999)PMVAL=9999; if(PMVAL<=0)PMVAL=0; WriteCOMDATA(0x83,0); WriteCOMDATA(PMVAL/1000+0x30,1); WriteCOMDATA(PMVAL/100+0x30,1); WriteCOMDATA(PMVAL/10+0x30,1); WriteCOMDATA(PMVAL+0x30,1); PM=pm1=pm2=0; } } //PM值与报警值比较 if(PMVAL>HPM) { bueezr_flag=1; } else { bueezr_flag=0;
29
BUZZER=1; } if(PMVAL>=100) WriteChar(1,12,4,\ else if((PMVAL<100)&&(PMVAL>=50)) WriteChar(1,12,4,\ else if(PMVAL<50) WriteChar(1,12,4,\ /*******蜂鸣器报警********/
bueezr_count++;if(bueezr_count>buzzer_time*10)bueezr_count=buzzer_time+1; if(bueezr_count%buzzer_time==0 && bueezr_flag) { BUZZER=~BUZZER;//蜂鸣器取反 发出声音提示 } if(!Reduc) { Delay(100); HPM--; WriteCOMDATA(0xC7,0); WriteCOMDATA(HPM/1000+0x30,1); WriteCOMDATA(HPM/100+0x30,1); WriteCOMDATA(HPM/10+0x30,1); WriteCOMDATA(HPM+0x30,1); } if(!Add) { Delay(100); HPM++; WriteCOMDATA(0xC7,0); WriteCOMDATA(HPM/1000+0x30,1); WriteCOMDATA(HPM/100+0x30,1); WriteCOMDATA(HPM/10+0x30,1); WriteCOMDATA(HPM+0x30,1); } } }
/************************************************ * 编写时间: 2016.05.09
30
* 作 者: liuweiliang
* 程序功能: LCD1602头文件
* 使用说明: 在需要使用LCD1602显示时添加此头文件“LCD1602.h” ************************************************/ #ifndef __LCD1602_H__ #define __LCD1602_H__ #include\ //添加延时函数头文件 #define LCD_PINDATA P0 //数据端口定义 P2 sbit RS = P1^4; //RS P0^7 sbit RW = P1^5; //RW P0^6 sbit E = P1^6; //E P0^5
/************************************************
** 函数名称 : WriteCOMDATA(uchar LCD_DATA,uchar N) ** 函数功能 : LCD1602写指令、数据函数 ** 输 入 : LCD_DATA:指令或者数据 N:指令方式还是数据方式 N=0时,LCD_DATA为指令,N=1时,LCD_DATA为数据 ** 输 出 : 无 ** 说 明 :
************************************************/ void WriteCOMDATA(uchar LCD_DATA,uchar N) {
Delay(1); E=1; RW=0; RS=N;
LCD_PINDATA=LCD_DATA; E=0; }
/************************************************ ** 函数名称 : void LCD_init(void) ** 函数功能 : LCD1602初始化操作 ** 输 入 : 无 ** 输 出 : 无 ** 说 明 :
************************************************/ void LCD_Init(void) {
WriteCOMDATA(0x01,0); Delay(500);
31
相关推荐: