历史上的今天
今天是:2024年11月11日(星期一)
2019年11月11日 | 单片机MQ-2烟雾检测+ADC0809 AD转换+lcd1602显示程序
2019-11-11 来源:51hei



单片机源程序如下:
/*============================================================
//
//程序编写:刘先生
接线:D0--D7接P0.0-P0.7
ST---P2.3
EOC--P2.2
OE---P2.1
CLK--P2.0
本程序源码只供学习参考,不得应用于商业用途,如有需要请联系作者。
[注:使用12M或11.0592M晶振,实测使用11.0592M]
=============================================================*/
#include #include #include "lcd.h" #define adc0809_data P0 //单片机P0接模块D0~D7引脚 sbit STR = P2^3; //单片机P2.3接模块STR引脚, 启动转换信号 sbit EOC = P2^2; //单片机P2.2接模块EOC, 转换结束信号,高电平有效 sbit OE = P2^1; //单片机P2.1接模块OE,输出允许信号,高电平有效 sbit CLK = P2^0; //单片机P2.0接CLK ,ADC0809时钟,输入50-800KHZ的频率 //一般选用500K //将短接片去掉开启位选功能,否则默认IN0为输入引脚 sbit AA = P2^6; //单片机P2.6接模块A引脚 sbit BB = P2^5; //单片机P2.6接模块B引脚 sbit CC = P2^4; //单片机P2.6接模块C引脚 unsigned char AD_DATA[1]; //保存IN0通道转换后的数据 unsigned char disbuff[4] = { 0,0,0,0,}; unsigned char Disp[]="0123456789"; //使用字符串保存数字0~9所对应的ASCLL码 unsigned char I_Disp[]="Smoke_C : "; //初始显示值 unsigned char i; /*********************************** 函数名: AD() 功能: 启动AD转换将值储存于 AD_DATA[0] ***********************************/ void AD(void ) { STR=0; STR=1; //启动AD转换 STR=0; while(0==EOC);//等待转换结束 OE=1; AD_DATA[0]=adc0809_data; //读取AD数据,数据范围为0-255 OE=0; } /*********************************** 函数名: t0() 功能: 产生ADC0809CLK所需要的时钟 ***********************************/ void t0(void) interrupt 1 using 0 { CLK=~CLK; } /*********************************** 函数名: Conut() 功能: 将AD_DATA[0]的各位拆分以方便lcd显示 ***********************************/ void Conut(void) { disbuff[0]=AD_DATA[0]/100; disbuff[1]=AD_DATA[0]/10%10; disbuff[2]=AD_DATA[0]%10; } /*********************************** 函数名: delayms() 功能: 延时 ms 毫秒 ***********************************/ void delayms(unsigned int ms) { unsigned char j; i=100; for(;ms;ms--) { while(--i) { j=10; while(--j); } } } /*********************************** 函数名: LcdDisplay() 功能: 用lcd显示数组disbuff[]中的值 ***********************************/ void LcdDisplay(void) { LcdWriteCom(0x0b+0x80); for(i=0;i<3;i++) { LcdWriteData(Disp[disbuff[i]]); } } /*********************************** 函数名: Analog_IO_Sel() 参数说明: m 的值对应ADC0809芯片上模拟输入的IO 功能: 确定模拟输入位选 ***********************************/ void Analog_IO_Sel(unsigned char m) { switch(m) { case 0 : CC = 0; BB = 0; AA = 0; break; case 1 : CC = 0; BB = 0; AA = 1; break; case 2 : CC = 0; BB = 1; AA = 0; break; case 3 : CC = 0; BB = 1; AA = 1; break; case 4 : CC = 1; BB = 0; AA = 0; break; case 5 : CC = 1; BB = 0; AA = 1; break; case 6 : CC = 1; BB = 1; AA = 0; break; case 7 : CC = 1; BB = 1; AA = 1; break; } } void main() { EA=1; //开总中断 TMOD=0x02; //设定定时器 T0工作方式 TH0=216; //利用T0中断产生CLK信号 TL0=216; TR0=1; //启动定时器T0 ET0=1; STR=0; OE=0; Analog_IO_Sel(0); //设置为IN0输入 LcdInit(); for(i=0;i<10;i++) //显示初始值 { LcdWriteData(I_Disp[i]); } while(1) { AD(); Conut(); //计算 LcdDisplay(); //lcd显示 delayms(10); //10MS } }
史海拾趣
|
一个地方下了一个WMV 解码的Dll. 另外一个地方下了一个TCPMP0.72, 它直接能用这个解码Dll播放WMV文件。(没有这个解码Dll,就不能播放WMV文件) TCPMP是按什么规则调解码Dll的(或解码插件)? … 查看全部问答> |
|
我把vxworks移植到了VMWARE的虚拟机上,编程时有两个问题想了解一下 1.我编译的VXWORKS内核是包含了target shell组件和一个host与target符号表同步的组件的,在TORNADO编好程序后download到虚拟机中,为什么在tornado的命令行下能运行程序中的函数 ...… 查看全部问答> |
|
帖子更新历史:11.2 7:05暂停更新,附件删除。最近感到精力不济,再说还有一些个别有待进一步提高的地方。还是等全部完成以后源码和一些文档一并公布。10.28 11:25 附件中添加新下载的官方demo压缩包和一个烧写HEX的软件(我还没有试验可不 ...… 查看全部问答> |
|
我想用手机蓝牙来控制灯牌的亮度,需要掌握什么知识?1,如何编写一个手机软件,来实现控制?2,在灯的硬件方面,用什么元件来接受蓝牙信号,蓝牙适配器? 求指教!!! … 查看全部问答> |
|
F2802X怎么在CCS看到的FLASH数据和HEX文件看到的数据不一样啊。 我用CODESKIN下载了hex文件,但是通过CCS看FLASH数据,却发现它们并不一致。确实有相同的数据,但是他们的地址不一样。这是怎么回事啊?… 查看全部问答> |
|
看到书店里的新书都突出了画PCB板的部分,那么学习C2000是否也要从学习画板子开始? 前些日子到书店看到,最近出版的有关卓越工程师的书籍,都突出了altium designer部分, 那么学习c2000 dsp是否也应该从学习PCB板的软件开始,那么现在是用altium的人多,还是 pads9.x的人多呢?… 查看全部问答> |




