单片机源程序如下:
/*============================================================
//
//程序编写:刘先生
接线: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 } }
上一篇:STC15w4k58s4单片机4串口同时收发例程
下一篇:BWT901CL的单片机和Arduino程序(蓝牙9轴)
推荐阅读最新更新时间:2024-11-13 07:26
设计资源 培训 开发板 精华推荐
- 科学家研发基于AI的身份验证工具 可保护车辆免受网络攻击威胁
- Microchip推出广泛的IGBT 7 功率器件组合,专为可持续发展、电动出行和数据中心应用而设计
- 面向未来驾驶体验 博世推出新型微电子技术
- 英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
- 5C超充,该怎么卷?
- 《2025年度中国汽车十大技术趋势》正式揭晓!你最看好哪个?
- Microchip推出新型VelocityDRIVE™软件平台和车规级多千兆位以太网交换芯片,支持软件定义汽车
- 英特尔中国正式发布2023-2024企业社会责任报告
- can转485数据是如何对应的
- MCU今年的重点:NPU和64位