亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機微波爐控制系統 含Proteus仿真+源程序
[打印本頁]
作者:
kingchaow
時間:
2019-6-18 22:15
標題:
單片機微波爐控制系統 含Proteus仿真+源程序
這是我之前做過的微波爐單片機課程設計,用了大概一周的時間
我是用protues做的仿真
附件里面有文檔,源碼和protues仿真的實驗
希望和大家多多交流
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖片1.png
(49.14 KB, 下載次數: 53)
下載附件
2019-6-18 22: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<reg52.h>
#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<N; 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<reg52.h>
#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<i;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) a=0x80;
if(hang==2) a=0xc0;
a=a+lie-1;
set(a);
}
/******************************************/
void wdata(unsigned char d) //往12864寫數據,單個字符
{
RS=1;
RW=0;
P0=d;
E=0;
delay();
E=1;
delay();
}
/******************************************/
void wsdata(char tab[]) //往12864寫數據,字符串
{
int i=0;
RS=1;
RW=0;
while(tab[i]!='\0') //不是結束符時執行
{
P0=tab[i];
E=0;
delay();
E=1;
delay();
i++;
}
}
/******************************************/
void scan() //矩陣鍵盤第一列掃描,確定所輸入的時間
{
P1=0xfe;
if(key1==0)
{ delay();
if(key1==1)
{ count1++;
beep();
}
}
if(key2==0)
{ delay();
if(key2==1)
{
count2++;
beep();
}
}
if(key3==0)
{ delay();
if(key3==1)
{
count3++;
beep();
}
}
if (key4==0)
{
key41=0;
beep();
}
}
/******************************************/
void setTemp() //溫度設定,采用掃描獨立鍵盤來確定輸入
{
while(1)
{
P3=0xff;
if(S1==0) button=1; //20度
if(S2==0) button=2; //30度
if(S3==0) button=3; //50度
if(button==1)
{
T=20;
weizhi(2,5);
wdata(table[2]);
delay_1ms(1);
weizhi(2,6);
wdata(table[0]);
}
if(button==2)
{
T=30;
weizhi(2,5);
wdata(table[3]);
delay_1ms(1);
weizhi(2,6);
wdata(table[0]);
}
if(button==3)
{
T=50;
weizhi(2,5);
wdata(table[5]);
delay_1ms(1);
weizhi(2,6);
wdata(table[0]);
}
if(button==1||button==2||button==3)
break;
}
}
/****************************************/
void setTime() //時間設定
{
while(1)
{
scan();
if(key41==0)
break;
}
m=(1*count1)+(2*count2)+(5*count3); //計算所設定的時間
Hot=1;
}
void showTime() //顯示時間
{
weizhi(2,11);
wdata(table[m/10]); //顯示分
delay_1ms(1);
weizhi(2,12);
wdata(table[m%10]);
delay_1ms(1);
weizhi(2,13);
wdata(':');
delay_1ms(1);
weizhi(2,14);
wdata(table[s/10]); //顯示秒
delay_1ms(1);
weizhi(2,15);
wdata(table[s%10]);
delay_1ms(1);
}
/****************************************/
void showTemp() //顯示溫度
{
delay_1ms(1);
weizhi(1,13);
wdata(table[Temp/10]);
delay_1ms(1);
weizhi(1,14);
wdata(table[Temp%10]);
delay_1ms(1);
}
/****************************************/
void chu12864() //初始化12864
{
set(0x01); //清屏
set(0x38); //顯示模式
set(0x0c); //顯示開
set(0x06); //光標設置
weizhi(1,4); //定義字符顯示位置 第一行,第四列
wsdata("Welcome"); //顯示開機歡迎語
weizhi(2,3);
wsdata("T=");
weizhi(2,7);
wsdata("oC");
IE=0x82; //設定定時器工作方式
TMOD=0X01;
TH0=(65536-50000)/256; //設定計時器的定時時長50MS
TL0=(65536-50000)%256;
button=0; //初始化參數
count1=0;
count2=0;
count3=0;
Hot=0;
m=0;
s=0;
T=0;
}
void chuDS() //初始化DS18B20
{
Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL = read_byte();
TMPH = read_byte();
Temp = TMPL / 16 + TMPH * 16;
delay_1ms(1);
}
復制代碼
全部資料51hei下載地址:
仿真 程序.zip
(82.38 KB, 下載次數: 97)
2019-6-18 22:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
柏林
時間:
2019-7-3 11:46
謝謝分享
作者:
柏林
時間:
2019-7-3 13:23
下載壓縮包里面沒有仿真圖
作者:
hhaamm
時間:
2020-3-16 20:00
Wendu.h(頭文件)是什么啊
作者:
千羽27
時間:
2020-12-21 20:42
請問蜂鳴器不響是為什么呀
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1