仿真电路
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define AD1674_DATA1 P0 //定义P2和P0为A/D转换数据
- #define AD1674_DATA2 P2
- sbit AD1674_STS=P3^0; //定义AD1674的各个控制信号对应的引脚号
- sbit AD1674_12_8=P3^1;
- sbit AD1674_CS=P3^2;
- sbit AD1674_A0=P3^3;
- sbit AD1674_CE=P3^4;
- sbit AD1674_RC=P3^5;
- sbit Buz=P1^0; //定义P3.0引脚位名称为蜂鸣器的控制引脚
- uint AD1674_ADC( )//TLC549的A/D转换程序
- {
- uint result;//定义result存放A/D转换结果
- uchar temp1,temp2;
- AD1674_DATA1=0XFF;
- AD1674_DATA2=0XFF;
- AD1674_CE=0;//控制信号初始化
- AD1674_CS=1;
- AD1674_RC=1;
- AD1674_A0=0;//12位转换
- AD1674_CS=0;//片选信号有效
- AD1674_RC=0;//转换信号有效
- AD1674_CE=1;//片允许信号有效,启动转换
- while(AD1674_STS!=0);
- AD1674_12_8=1;//输出格式为12位
- AD1674_RC=1;//读信号有效
- temp1=AD1674_DATA1;
- temp2=(AD1674_DATA2)&0x0f;//12位数据的处理
- result=(temp2<<8)|temp1;
- AD1674_CS=1;//一个周期结束后,AD1674的CS端设置为高电平
- return result;//返回A/D转换结果
- }
- /*延时子程序*/
- void Sleep(uchar count)
- {
- uchar i;
- while(count-- != 0) for(i=0;i<255;i++);
- }
- void main()
- {
- unsigned long int tt,dd;
- while(1)
- {
- dd=AD1674_ADC();//读取温度转换的数字量
- tt=dd*100/2007;//计算温度值,根据LM35的特性,温度每变化1°C对应的输出电压为10mV
- //LM35输出的信号经过放大电路放大了4.9倍,经过AD1674进行A/D转换得到
- //数字量tt。所以由tt可得到温度值=数字量tt/409.5/4.9*100
- if(tt>=50)//温度高于50°C,蜂鸣器报警
- {
- Buz=~Buz;
- Sleep(5);
- }
- else//否则蜂鸣器不报警
- Buz=1;
- }
- }
复制代码
|