云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于单片机的室内甲醛检测仪的设计毕业设计

基于单片机的室内甲醛检测仪的设计毕业设计

  • 62 次阅读
  • 3 次下载
  • 2025/5/29 6:19:09

#define Busy 0x80 //用于检测LCM状态字中的Busy标识 sbit LCM_RW = P2^6; //读写控制输入端,LCD1602的第五脚 sbit LCM_RS = P2^5; //寄存器选择输入端,LCD1602的第四脚 sbit LCM_E = P2^7; //使能信号输入端,LCD1602的第6脚

//------------------蜂鸣器发声引脚定义-------------------------------------- sbit buzz=P0^4;

//**************函数声明*************************************** void WriteDataLCM (uchar WDLCM);//LCD模块写数据

void WriteCommandLCM (uchar WCLCM,BuysC); //LCD模块写指令 uchar ReadStatusLCM(void);//读LCD模块的忙标

void DisplayOneChar(uchar X,uchar Y,uchar ASCII);//在第X+1行的第Y+1位置显示一个字符

void LCMInit(void);//LCD初始

void delayms(uint ms);//1MS基准延时程序 void delay(uchar i); //延时函数2

void DisplayListChar(uchar X,uchar Y,uchar delayms, uchar code *DData); void judge_xianshi(void);//显示处理程序 void baojing();//报警函数 void init();//系统初始化设置 void AD();//读取AD数据

uchar flag1;

//***********************主程序****************************** main() { uint temp;

init();//系统初始化设置 LCMInit(); while(1) {

AD(); if(AD_DATA[0]>102) baojing();

judge_xianshi(); delayms(100); } }

/********* 系统初始化 ***********/

void init() { buzz=0;

EA=1; //开总中断

TMOD=0x02; //设定定时器 T0工作方式 TH0=216; //利用T0中断产生CLK信号 TL0=216;

TR0=1; //启动定时器T0 ET0=1; STR=0; OE=0; }

void judge_xianshi() {

addata2=AD_DATA[0]*100;//把数据扩大100,为下面求取小数位后2位做准备 //DisplayListChar(0,1,0, \ Lixinguang\在液晶的第一行显示字符\ DisplayListChar(0,0,0, \在液晶的第二行第0位开始显示\ DisplayOneChar( 0, 3, AD_DATA[0]/100+0x30); //显示AD数据的百位 DisplayOneChar( 0, 4, AD_DATA[0]/10+0x30);//显示AD数据的十位 DisplayOneChar( 0, 5, AD_DATA[0]+0x30);//显示AD数据的各位 DisplayListChar(0,7,0, \在液晶的第二行第8位开始显示\//根据VIN=AD*5/256,求取IN3通到输入的电压

DisplayOneChar( 0, 11, AD_DATA[0]/51+0x30);//显示输入电压的整数位 DisplayListChar(0,12,0, \显示小数点

DisplayOneChar( 0, 13, addata2/51/10+0x30);//显示输入电压小数后1位 DisplayOneChar( 0, 14, addata2/51+0x30);//显示输入电压小树后2位 DisplayListChar(0,15,0, \ }

/************报警函数 *******/ void baojing() { int i;

for (i=0;i<3;i++) {buzz=1; delayms(200); buzz=0;

delayms(200); } buzz=0; }

/***********AD

转换函数 **********/ void AD() {

STR=0;

//ADDR这样如果不是通道0,可以在这边加一条其他地址的程序 delay(10);

STR=1; //启动AD转换 delay(10); STR=0;

while(0==EOC);//等待转换结束 OE=1;

AD_DATA[0]=adc0809_data; //读取AD数据,数据范围为0-255 OE=0; }

/***********T0 中断服务程序 ************/

void t0(void) interrupt 1 using 0 {

CLK=~CLK; }

/*==================================================================== 按指定位置显示一串字符:第 X 行,第 y列 注意:字符串不能长于16个字符

======================================================================*/

void DisplayListChar(uchar X,uchar Y,uchar ms, uchar code *DData) {

unsigned char ListLength;

ListLength = 0;

X &= 0x1;

Y &= 0xF; //限制X不能大于15,Y不能大于1

while (DData[ListLength]!='\\0') //若到达字串尾则退出 {

if (Y <= 0xF) //X坐标应小于0xF {

DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符 ListLength++; Y++; delayms(ms);//延时显示字符串

} else break;//跳出循环体 } }

/*======================================================================

LCM初始化

======================================================================*/

void LCMInit(void) {

LCM_Data = 0;

WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号 delayms(5);

WriteCommandLCM(0x38,0); delayms(5);

WriteCommandLCM(0x38,0); delayms(5);

WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08,1); //关闭显示 WriteCommandLCM(0x01,1); //显示清屏

WriteCommandLCM(0x06,1); // 显示光标移动设置 WriteCommandLCM(0x0C,1); // 显示开及光标设置 delayms(100); }

//==============================LCD1602显示子程序================================================ // 写数据函数: E =高脉冲 RS=1 RW=0

//======================================================================*/

void WriteDataLCM(uchar WDLCM) {

ReadStatusLCM(); //检测忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0;

LCM_E = 0; //若晶振速度太高可以在这后加小的延时 LCM_E = 0; //延时 LCM_E = 1; }

/*==================================================================== 写指令函数: E=高脉冲 RS=0 RW=0

======================================================================

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

#define Busy 0x80 //用于检测LCM状态字中的Busy标识 sbit LCM_RW = P2^6; //读写控制输入端,LCD1602的第五脚 sbit LCM_RS = P2^5; //寄存器选择输入端,LCD1602的第四脚 sbit LCM_E = P2^7; //使能信号输入端,LCD1602的第6脚 //------------------蜂鸣器发声引脚定义-------------------------------------- sbit buzz=P0^4; //**************函数声明*************************************** void WriteDataLCM (uchar

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com