|
期末大作业:
多点温度检测系统的设计
基本要求:
1、掌握51系列单片机的基本结构及设计方法;
2、了解多点温度检测系统的工作原理;
3、熟悉多点温度检测系统的设计方案及其优劣;
4、选择一款合适的方案完成多点温度检测系统的设计。
功能要求:
1、设计一个4路温度检测系统,每路温度的变化范围是-10℃--+110℃;
2、对4路温度循环进行显示,显示格式为“第X路 XXX.X度”,每路显示的时间自定,当按下【锁定】键时,仅显示锁定的那一路的温度,再次按下【锁定】键后,恢复循环显示;
3、每路温度可单独设置上下限报警范围;
4、当检测到的实际温度超出设置的上下限(高于上限或者低于下限)时发出声音报警,同时显示器闪烁显示报警的温度及路数(按【取消】键后停止报警);
5、按键若干。
设计内容:
1、方案设计;
2、多点温度检测系统的硬件设计;
3、多点温度检测系统的软件设计和调试;
4、多点温度检测系统的仿真;
5、完成大作业
的半成品。。。
单片机源程序如下:
- #include "reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
-
- //sbit Buzz = P3^2;
- sbit Buzz = P1^5;
- /*******************************************lcd1602.c函数声明************************************************/
- extern void InitLcd1602(); //lcd1602初始化函数
- extern void DisplayLimit(uchar x,uchar y,char dat); //在坐标(x,y)显示温度上限或下限
- extern void InitMaxMin(); //进入温度报警值设置界面
- extern void Display_user(uchar x); //显示用户自定义的字符“↑”
- extern void LcdShowStr(uchar x,uchar y,uchar *str);
- extern void LcdShowDat(uchar x,uchar y,uchar num);
- extern void Display_laba();
- /*******************************************key.c函数声明****************************************************/
- extern void KeyDrive();
- extern void KeyScan();
- /****************************************ds18b20.c函数声明***************************************************/
- extern bit RESET_DS18B20(void);
- extern uint Read_DS18B20_TEMP(void);
- /*****************************************main.c子函数声明***************************************************/
- void Timer1Init(uint ms); //定时器1初始化函数
- void SetLimit(); //设置报警值函数
- void ControlBuzz(); //蜂鸣器控制函数
- void delay(uint z);
- /**********************************************变量定义******************************************************/
- extern uchar code buff[];
- uchar T1RH=1; //定时器初值
- uchar T1RL=1;
- bit flagBuzz=0; //蜂鸣器开关标志
- bit EBuzz=0; //蜂鸣器使能标志
- char High=20; //温度上限 超过限度蜂鸣器开
- char Low=10; //温度下限
- uchar mode=0; //模式变量
- uchar cnt=0; //ESC按键 变量
- uchar tflag; //温度正负标志位
- /*************************************主函数***************************************/
- void main()
- {
- EA=1; //开启总中断
- Timer1Init(1); //初始化定时器1
- RESET_DS18B20(); //复位18B20
- delay(20);
- InitLcd1602(); //初始化lcd1602
- while(1)
- {
- LcdShowDat(10,1,buff[Read_DS18B20_TEMP()/100]); //显示温度值十位
- LcdShowDat(11,1,buff[Read_DS18B20_TEMP()/10%10]); //显示温度值个位
- LcdShowStr(12,1,"."); //显示小数点
- LcdShowDat(13,1,buff[Read_DS18B20_TEMP()%10]); //显示小数位
- KeyDrive(); //按键驱动
- SetLimit(); //设置报警值
- }
- }
- /**********************************按键动作函数************************************/
- void KeyDown(uchar keycode)
- {
- if(keycode==0x0D) //回车键:进入模式设置
- {
- mode++;
- if(mode>2)mode=0;
- }
- else if(keycode==0x26) //向上键:模式1 上限值+1 模式2 下限值+1
- {
- if(mode==1)
- {
- High++;
- if(High>99)High=99;
- }
- else if(mode==2)
- {
- Low++;
- if(Low==High)Low=High-1;
- }
- }
- else if(keycode==0x28) //向下键:模式1 上限值-1 模式2 下限值-1
- {
- if(mode==1)
- {
- High--;
- if(High==Low)High=Low+1;
- }
- else if(mode==2)
- {
- Low--;
- if(Low<0)Low=0;
- }
- }
- else if(keycode==0x1B) //Esc键:开关蜂鸣器报警
- {
- if(mode==0)
- {
- cnt++;
- if(cnt>1)cnt=0;
- if(cnt==1) //蜂鸣器使能开启 显示喇叭图像
- {
- EBuzz=1;
- Display_laba();
- }
- else if(cnt==0) //蜂鸣器使能关闭 不显示喇叭
- {
- EBuzz=0;
- LcdShowStr(7,0," ");
- }
- }
- }
- }
- /************************************报警值设置函数*********************************/
- void SetLimit()
- {
- if(mode==0); //模式0 正常显示 调用蜂鸣器控制函数
- {
- ControlBuzz();
- }
-
- if(mode!=0) //模式1 调整温度上限
- { //模式2 调整温度下限
- EBuzz=0;
- InitMaxMin();
- while(mode!=0)
- {
- KeyDrive();
- if(mode==1)
- {
- Display_user(3); //显示自定义的 箭头 图像 指向温度上限
- DisplayLimit(2,0,High); //显示 温度报警值上下限
- DisplayLimit(12,0,Low);
- }
- else if(mode==2)
- {
- Display_user(13); //显示自定义的 箭头 图像 指向温度下限
- LcdShowStr(3,1," ");
- DisplayLimit(2,0,High);
- DisplayLimit(12,0,Low);
- }
- }
- InitLcd1602();
- }
- }
- /************************************蜂鸣器控制函数************************************/
- void ControlBuzz()
- {
- if((Read_DS18B20_TEMP()>=(10*High))||(Read_DS18B20_TEMP()<=(10*Low)))
- flagBuzz=1;
- else
- flagBuzz=0;
- if((flagBuzz==1)&&(EBuzz==1))
- {
- Buzz=~Buzz;
- }
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=115;y>0;y--);
- }
- /**********定时器1初始化函数***********/
- void Timer1Init(uint ms)
- {
- ulong tmp; //16位长整型变量tmp
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
11.DS18B20温度报警.rar
(68.75 KB, 下载次数: 52)
|
评分
-
查看全部评分
|