基于单片机的多路温度巡检系统设计毕业设计说明书 - 图文(9)

2020-02-21 17:27

显示温度VCCVCC1P1023P124P135P146P157P168P17RST910111213P3414P3515P3616P3717X218X11920VCCP10/T2P11/T2EXAD0/P00AD1/P01P12AD2/P02P13AD3/P03P14P15(MOSI)AD4/P04P16(MISO)AD5/P05P17(SCK)AD6/P06AD7/P07RSTEA/VPPP30/RXDP31/TXDALE/PROGPSENP32/INT0A15/P27P33/INT1A14/P26P34/T0A13/P25P35/T1A12/P24P36/WRA11/P23P37/RDA10/P22XTAL2A9/P21XTAL1A8/P20GNDP00P01P02P03P04P05P06P07fedgbcedpfgd78U14039383736353433323130292827262524232221bcdpP25P24P23P22P21P20Q5NPNR114.7KP0010P01P029P031P043P052P066P0745P0011P01P027P034P042P05110P06P0753显示通道feD1数码管2位dgabcedpfgdbcedpfgdbcedpfagdbcdpS0巡检键P12s1SW-PBSW-PB复位电路P13s2SW-PB10KR1C110uF/25VD2数码管4位12定点键退出键P14s3C2SW-PBC320PSTC 12C5A16ADY112M20P986Q1NPNQ2NPNQ3NPNQ4NPNQ6NPNR134.7KR24.7KR34.7KR54.7KR74.7KR94.7KR44.7KR64.7KR84.7K晶振电路独立按键单片机最小系统P24R104.7KP25R124.7K动电路LED驱附录

P201U3D1BRIDGE1U67805VCC+5VC10104470uF/16V2P21OUTxU2P157P166P175C11SOCSSCKT+T-VCC324OUTxOUTyVCC1GNDMAX6675C15470uF/16V3C16104C120.1uFVCC-VCC33X交流电压12VC8C9104470uF/16V3GND21

4Vin211678INH6VCCVEE470uF/16V2GNDC13U7C1479051041GNDABC11109CD4051Vin-5V电源电路-VCCAD采集U4OUTy3XVCCU3x1x2x3x4x5x6x7x8VCC-VCCBUZZERR14P101212121212121212X0X1X2X3X4X5X6X71678131415121524y0y1y2y3y4y5y6y7INH6P34VCCVEEGNDQ11.5K9012ABC11109P35P36P37CD4051通道切换x0y0x1y1x2y2x3y3x4y4x5y5x6y6x7y7原理图

热电偶K型警报器鸣蜂

7 3

JP?X0X1X2X3X4X5X6X7131415121524x0x1x2x3x4x5x6x7P22P23

部分程序

#include \ //包含头文件

#include \()延时函数需要引用的头文件

#define uchar unsigned char //宏定义下文中的uchar和uint都用unsigend char和unsigend int代替

#define uint unsigned int

sbit SO=P1^5; // 定义MAX6675的数据IO口 sbit SCK=P1^6; // 定义MAX6675的时钟IO口 sbit CS=P1^7; // 定义MAX6675的片选IO口

sbit S1=P1^2; //定义按键IO口 sbit S2=P1^3; sbit S3=P1^4;

sbit BEEP=P1^0;//定义蜂鸣器IO口

sbit TA=P3^5; //定义TA、TB、TC:4051电子开关的通道选择 sbit TB=P3^6; sbit TC=P3^7;

sbit INH=P3^4; //定义4051的片选信号 uint j=0; //延时使用的中间变量 uint wendu; //当前的温度 uint baojin=500;//报警温度值

uint Read_AD(); //读取MAX6675的温度数据函数的声明 void Display_temp(); //显示函数的声明

uchar qian=0,bai=0,shi=0,ge=0,xiao=0;//温度的各个数据分离 uint temp; //中间变量

uint channel_num=1; //当前通道号 uint system_flag=1; //定义

uchar code tab_1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9不带小数点显示段码

uchar code tab_2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //0~9带小数点显示段码

uchar code tab_3[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //对应显示位码 uint tt=500;

/*********************************************************** *函数名: uint Read_AD() *函数描述:读温度数据

38

*输入参数:无

*输出参数:uint

************************************************************/ uint Read_AD() {

uchar i; //定义中间变量

unsigned long Temp_2=0; //定义中间变量,用于存储读取的AD数据 CS=1; SCK=0; _nop_(); CS=0;

for(i=0;i<16;i++) //读取AD的16位数据 {

Temp_2<<=1; //左移一位 _nop_(); //延时 SCK=1; //拉高时钟

if(SO==1) //若数据为高,则数据为加1 {Temp_2=Temp_2|0x01;} else

Temp_2=Temp_2|0x00; //否则清零 _nop_(); //简单延时 SCK=0; //拉低时钟 _nop_(); //简单延时 }

Temp_2=Temp_2&0x7FF8; //读取数据的第3~14位

Temp_2=Temp_2*1024*5/4096/4; //对数据进行处理,处理成温度数据 return(Temp_2); //返回温度 }

/////////////延时函数/////////////////////////// void delay(uint n) {

uint i=0,j=0; for(i=n;i>0;i--) {

for(j=110;j>0;j--); } }

/*********************************************************** *函数名: void Display_temp()

*函数描述:显示温度数据 ,及当前通道号 *输入参数:无

*输出参数:无

************************************************************/ void Display_temp()

9 3

{

uint temp=wendu; temp=temp*10; if(wendu<=500) {

bai=wendu/1000; //对温度数据进行处理 wendu=wendu00; shi=wendu/100; wendu=wendu0; ge=wendu/10; wendu=wendu; xiao=wendu;

P2=0xFF; delay(1);

P2=tab_3[0]; // P0=tab_1[bai];

for(j=tt;j>0;j--); // delay(2);

P2=0xFF; delay(1);

P2=tab_3[1]; // P0=tab_1[shi]; delay(2);

P2=0xFF; delay(1);

P2=tab_3[2]; // P0=tab_2[ge]; delay(2);

P2=0xFF; delay(1);

P2=tab_3[3]; // P0=tab_1[xiao]; delay(2); } }

void Show_Channel(void) {

P2=0xFF; delay(1);

P2=tab_3[4]; //

显示百位数字 延时 显示十位数字 显示个位数字 显示小数位 显示通道号 十位

40

P0=tab_1[channel_num/10]; delay(2);

P2=0xFF; delay(1);

P2=tab_3[5];

P0=tab_1[channel_num]; //显示通道号 个位 delay(2); }

/*********************************************************** *函数名: void Choose_Channel(uint num) *函数描述:选择通道 *输入参数:uint num *输出参数:无

************************************************************/ void Choose_Channel(uint num) {

INH=0; switch(num) {

case 1:{TA=0;TB=0;TC=0;break;} //选通第1通道 case 2:{TA=0;TB=0;TC=1;break;} //选通第2通道 case 3:{TA=0;TB=1;TC=0;break;} //选通第3通道 case 4:{TA=0;TB=1;TC=1;break;} //选通第4通道 case 5:{TA=1;TB=0;TC=0;break;} //选通第5通道 case 6:{TA=1;TB=0;TC=1;break;} //选通第6通道 case 7:{TA=1;TB=1;TC=0;break;} //选通第7通道 case 8:{TA=1;TB=1;TC=1;break;} //选通第8通道 default:break; } }

////////////////////按键扫描函数/////////////////// uint Key_Scan(void) {

if(S1==0)//如果是S1按键按下 {

delay(2000);//延时消斗

if(S1==0)//再次判断是否按下 {

return 1;//返回按键号 }

while(S1==0);//松手检测

1 4


基于单片机的多路温度巡检系统设计毕业设计说明书 - 图文(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:五四红歌活动总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

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