一种基于51单片机的粉尘监测系统的设计—定稿 - 图文

2026/1/10 10:17:15

WriteCOMDATA(0x38,0); Delay(10);

WriteCOMDATA(0x06,0); Delay(10);

WriteCOMDATA(0x0c,0); Delay(10); }

/************************************************

** 函数名称 :void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer) ** 函数功能 :在任意位置写指定个字符

** 输 入 :Row : 要写的字符所在的行,只能为1或2; Col : 要写的字符所在的列,只能为0---15 Num : 要写字符的个数

pbuffer : 要写字符的首地址 ** 输 出 :无 ** 说 明 :

************************************************/

void WriteChar(uchar Row,uchar Col,uchar Num,uchar *pBuffer) {

uchar i;

if(Row==1)Row=0x80+Col; else Row=0xC0+Col; WriteCOMDATA(Row,0); for(i=Num;i!=0;i--) { WriteCOMDATA(*pBuffer,1); pBuffer++; } }

#endif#include\ //添加延时函数头文件 #include sbit CS = P1^2; sbit Clk = P1^1; sbit DATI = P1^0; sbit DATO = P1^0;

/****************************************************************************

函数功能:AD转换子程序 入口参数:CH 出口参数:dat

32

****************************************************************************/

unsigned char adc0832(unsigned char CH) {

unsigned char dat = 0x00; //AD值 unsigned char i,test,adval; adval = 0x00; test = 0x00;

Clk = 0; //初始化 DATI = 1; _nop_(); CS = 0; _nop_(); Clk = 1; _nop_();

if ( CH == 0x00 ) //通道选择 {

Clk = 0;

DATI = 1; //通道0的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0;

DATI = 0; //通道0的第二位 _nop_(); Clk = 1; _nop_(); } else {

Clk = 0;

DATI = 1; //通道1的第一位 _nop_(); Clk = 1; _nop_(); Clk = 0;

DATI = 1; //通道1的第二位 _nop_(); Clk = 1; _nop_();

33

}

Clk = 0; DATI = 1;

for( i = 0;i < 8;i++ ) //读取前8位的值 {

_nop_();

adval <<= 1; Clk = 1; _nop_(); Clk = 0; if (DATO) adval |= 0x01; else

adval |= 0x00; }

for (i = 0; i < 8; i++) //读取后8位的值 {

test >>= 1; if (DATO)

test |= 0x80; else

test |= 0x00; _nop_(); Clk = 1; _nop_(); Clk = 0; }

if (adval == test) //比较前8位与后8位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉 dat = test; _nop_();

CS = 1; //释放ADC0832 DATO = 1; Clk = 1; return dat; }

#include\ sbit v_led = P3^2;

34

uint count_100us;

/************************************************ ** 函数名称 : Init_Timer0(void)

** 函数功能 : 定时器0初始化子程序 ** 输 入 : 无 ** 输 出 : 无

** 说 明 : 对定时器0进行初始化 模式1 16位定时器 0~65536 ************************************************/ void Init_Timer0(void) //定时器初始化子程序 {

TMOD |= 0x01; //使用模式1,16位定时器,使用\符号可以在使用多个定时器时不受影响

TH0=0xFF; //定时器赋初值 TL0=0xA4;

ET0=1; //使能定时器中断 TR0=1; //打开定时器 EA=1; //打开总中断 }

/************************************************ ** 函数名称 : Timer0_isr(void) interrupt 1 using 1 ** 函数功能 : 定时器中断程序 ** 输 入 : 无 ** 输 出 : 无

** 说 明 : 定时器计数到65536溢出执行中断函数 定时器重新赋值及状态指示灯取反 ************************************************/ //void Timer0_isr(void) interrupt 1 using 1 //{

// TH0=0xFF; //重新赋值 // TL0=0xA4; // count_100us++;

// if(count_100us<30)TEST=0; // else if(count_100us<90)TEST=1; // else count_100us=0;

// //TEST=~TEST; //状态指示灯取反 //}

/************************************************ * 文件功能: 延时函数头文件 * 使用说明: 在需要使用延时函数时添加此头文件“delay.h” ************************************************/

35

#ifndef __DELAY_H__ #define __DELAY_H__ #include //#include

#define uchar unsigned char #define uint unsigned int

/************************************************ ** 函数名称 : Delay(uint T) ** 函数功能 : 延时函数

** 输 入 : T--延时倍数 大小--0~65535 ** 输 出 : 无 ** 说 明 :

************************************************/ void Delay(uint T) {

uchar i;

for(T;T>0;T--)

for(i=200;i>0;i--); }

#endif

36


一种基于51单片机的粉尘监测系统的设计—定稿 - 图文.doc 将本文的Word文档下载到电脑
搜索更多关于: 一种基于51单片机的粉尘监测系统的设计—定稿 - 图文 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219