单片机 > 单片机程序设计 > 详情

单片机微波炉控制系统

发布时间:2023-04-12 发布时间:
|

单片机源程序如下:

Wendu.h (头文件)

#define jump_ROM 0xCC//ds18B20定义

#define start 0x44

#define read_EEROM 0xBE

void delay(unsigned int N);

void delay_1();

unsigned char Reset(void);//复位DS18B20

unsigned char read_bit(void);//从DS18B20读一个位值

void write_bit(unsigned char bitval);//向DS18B20写一位

unsigned char read_byte(void);//从DS18B20读一个字节

void write_byte(unsigned char val);// 向DS18B20写一个字节


Wendu.c (Wendu.h 的实现)

#include

#include"wendu.h"

sbit DQ = P2^3; //DS18B20数据口


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

* 名称 : delay()

* 功能 : 延时,延时时间大概为140US。

* 输入 : 无

* 输出 : 无

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

void delay_1()

{

int i,j;

for(i=0; i<=10; i++)

for(j=0; j<=2; j++);

}

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

* 名称 : delay()

* 功能 : 延时函数

* 输入 : 无

* 输出 : 无

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

void delay(unsigned int N)

{

int i;

for(i=0; i

}

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

* 名称 : Reset()

* 功能 : 复位DS18B20

* 输入 : 无

* 输出 : 无

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

unsigned char Reset(void)

{

unsigned char deceive_ready;

DQ = 0;

delay(29);

DQ = 1;

delay(3);

deceive_ready = DQ;

delay(25);

return(deceive_ready);

}

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

* 名称 : read_byte()

* 功能 : 从DS18B20读一个字节

* 输入 : 无

* 输出 : 从DS18B20读到的值

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

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

* 名称 : read_bit()

* 功能 : 从DS18B20读一个位值

* 输入 : 无

* 输出 : 从DS18B20读出的一个位值

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

unsigned char read_bit(void)

{

unsigned char i;

DQ = 0;

DQ = 1;

for(i=0; i<3; i++);

return(DQ);

}

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

* 名称 : write_bit()

* 功能 : 向DS18B20写一位

* 输入 : bitval(要对DS18B20写入的位值)

* 输出 : 无

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

void write_bit(unsigned char bitval)

{

DQ=0;if(bitval==1)

DQ=1;

delay(5);

DQ=1;

}

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

* 名称 : read_byte()

* 功能 : 从DS18B20读一个字节

* 输入 : 无

* 输出 : 从DS18B20读到的值

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

unsigned char read_byte(void)

{

unsigned char i,m,receive_data;

m = 1;

receive_data = 0;

for(i=0; i<8; i++)

{

if(read_bit())

{

receive_data = receive_data + (m << i);

}

delay(6);

}

return(receive_data);

}


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

* 名称 : write_byte()

* 功能 : 向DS18B20写一个字节

* 输入 : val(要对DS18B20写入的命令值)

* 输出 : 无

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

void write_byte(unsigned char val)

{

unsigned char i,temp;

for(i=0; i<8; i++)

{

temp = val >> i;

temp = temp & 0x01;

write_bit(temp);

delay(5);

}

}


主函数的实现

#include

#include"wendu.h"

sbit key1=P1^4; //矩阵键盘定义

sbit key2=P1^5;

sbit key3=P1^6;

sbit key4=P1^7;

sbit S1=P3^2; //按键定义

sbit S2=P3^3;

sbit S3=P3^4;

sbit RS=P2^5; //12864定义

sbit RW=P2^6;

sbit E=P2^7;

sbit BEEP = P2^0; //蜂鸣器定义

sbit Hot=P2^1;

unsigned char TMPH,TMPL,key41=1,Temp,T; //温度常量

unsigned int count1,count2,count3; //时间常量

unsigned int countor,m,s; //计时常量

unsigned char button,sound; //其他常量

unsigned char code table[]={"0123456789"};


/******************子程序说明********************/

void delay_1ms(unsigned int i); //1ms延时

void delay(); //延时子程序

void beep(); //响铃程序

void set(char n); //12864写指令子程序

void weizhi(int hang,int lie); //12864字符显示位置

void wdata(unsigned char d); //往12864写数据,单个字符

void wsdata(char tab[]); //往12864写数据,字符串

void scan(); //矩阵键盘第一列扫描,确定所输入的时间

void setTemp(); //温度设定,采用扫描独立键盘来确定输入

void setTime(); //时间设定

void showTime(); //显示时间

void chu12864(); //初始化12864

void chuDS(); //初始化DS18B20


/********************主程序*************************/

void main() //主函数

{

chu12864();//12864的初始化

setTemp();

setTime();

while(1)

{

chuDS();

if(Temp==T)

TR0=1;

showTemp();

showTime();

if(sound==1)

beep();

}

}

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


void time0(void) interrupt 1 using 1 //定时中断程序

{

countor++;

if(countor==20)

{

if(m==0&&s==0) //倒计时

{

m=0;

s=0;

sound=1;

Hot=0;

TR0=0;

}

else

if(s==0)

{ m--;s=59;}

else

s--;

countor=0;

}

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

}



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

void delay_1ms(unsigned int i) //1ms延时

{

unsigned char x,j;

for(j=0;j

for(x=0;x<=148;x++);

}

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

void delay() //延时子程序

{

int a,b;

for(a=0;a<100;a++)

for(b=0;b<10;b++);

}/************************************************/

void beep() //响铃程序

{

unsigned char i;

for (i=0;i<100;i++)

{

delay_1ms(1);

BEEP=!BEEP; //BEEP取反

}

BEEP=1; //关闭蜂鸣器

}

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

void set(char n) //12864写指令子程序

{

P0=n;

RS=0;

RW=0;

E=0;

delay();

E=1;

delay();

}

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

void weizhi(int hang,int lie) //12864字符显示位置

{

char a;

if(hang

[1] [2]


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
MSP430低功耗模式-while循环失效