Y
Y
Y
N
Y
N
Y
N
Y
N
N
Y
N
N
Y
N
图19 温度设定、报警模块流程图
5.6 数码管驱动模块
本设计数码管通过锁存器接单片机P0口,采用动态扫描驱动7段LED数码管进行显示,需调用延时子程序以稳定显示。 模块流程图如下:
图20 数码管驱动模块流程图
6 源程序
#include
#define uchar unsigned char #define uint unsigned int
/*************************变量定义************************************/ sbit DQ=P2^2;//ds18b20 端口 sbit beep=P2^3;//蜂鸣器使能端 sbit dula=P2^6;//数码管段选使能 sbit wela=P2^7;//数码管位选使能 sbit add=P3^5;//加键 sbit sub=P3^4;//减键
sbit alarm=P3^6;//设定报警功能键
sbit record=P3^7;//查询温度记录功能键 uchar code tabled[]={
0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, //0~9的七段数码管段码 0x40,0x63,0x39};//- c 的段码
uchar code tablew[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};//1~8个数码管的位选码 uchar recordtable[10];//存储过去的十个温度值 uchar temperature;//温度值
uchar countsec,recordnum,count;//计数变量 uint countmin;//计数变量
uchar alanum=30;//报警温度值,初始值为30摄氏度 uchar z=65;//消抖延时函数入口参数
/**********************函数声明***************************************/ void delay1(uchar MS);//动态扫描延时子程序 void delay(uchar i);//DS18B20工作延时子程序 void Init_DS18B20();//DS18B20初始化子程序
void WriteOneChar(unsigned char dat);//向DS18B20写一字节数据 uchar ReadOneChar(void);//向DS18B20读一字节数据 void GetTemperature();//由DS18B20产生温度值
void Display(uchar wei,uchar duan);//数码管驱动子程序 void Alarm();//温度报警
void Showtemperature(uchar tt);//温度显示 void Keeprecord();//记录温度值
void Showrecord();//显示记录的温度值
/*********************主函数*******************************************/ void main() { TMOD=0x01;//定时器初始化,定时器0方式1 TH0=(65536-50000)/256;//50ms TL0=(65536-50000)%6; EA=1;//开中断
ET0=1;
TR0=1;//启动定时器 while(1) {
Showtemperature(temperature);//显示实时温度 Alarm();//温度设定、报警 Showrecord();//查询温度记录值 } }
/************************动态扫描延时函数********************************/ void delay1(uchar MS) { int i,j; for(i=80;i>0;i--) for(j=MS;j>0;j--); }
/************************DS18B20工作延时函数*****************************/ void delay(uchar i) {
while(i--); }
/*************************DS18B20初始化函数******************************/ void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay(10); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay(5); while(!x) { x=DQ; } }
/*************************读一个字节**************************************/ uchar ReadOneChar(void) {
unsigned char i=0;
相关推荐: