|
原理圖是用ad軟件畫的,單片機(jī)微波爐課程設(shè)計(jì)資料包里面含程序源碼 proteus仿真和ad畫的原理圖
0.png (76.81 KB, 下載次數(shù): 53)
下載附件
2017-2-27 23:20 上傳
仿真原理圖:
0.png (38.78 KB, 下載次數(shù): 58)
下載附件
2017-2-27 23:20 上傳
單片機(jī)微波爐的程序源碼:
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uint dis[]={0x00,0x00,0x00,0x00};
- uint pv=1,pv_j=6,pv_l=24; //定義 檔位、加熱時(shí)間、冷卻時(shí)間(每個(gè)周期)
- uint count_s=0; //記錄定時(shí)時(shí)間
- uint cyc0=20,cyc1=20; // 為了計(jì)時(shí)一秒,定時(shí)器一次中斷為50ms,20*50ms=1s
- uchar codevalue[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff}; //七段數(shù)碼管顯示碼,顯示0~9和全亮
- uchar codecho[]={0xfe,0xfd,0xfb,0xf7}; //位選碼
- sbit P10=P1^0; //引腳定義
- sbit P11=P1^1;
- sbit P12=P1^2;
- sbit P13=P1^3;
- sbit P14=P1^4;
- sbit P15=P1^5;
- sbit P16=P1^6;
- sbit P17=P1^7;
- sbit duan=P2^0;
- sbit wei=P2^1;
- sbit P22=P2^2;
- sbit P23=P2^3;
- sbit P24=P2^4;
- /*--------------------
- 延時(shí)函數(shù),大致延時(shí)一毫秒
- -------------------*/
- void delay_ms(uint t)
- {uchar i;
- while(t--)
- {
- i=250;
- while(--i);
- }
- }
- /*------------------------
- 定時(shí)器初始化
- --------------------------*/
- void t_clr()
- {
- EA=1; //CPU開中斷
- ET0=1;
- ET1=1; //定時(shí)器 中斷允許
- TMOD=0X11; //定時(shí)器T1、T0 定時(shí) 方式一
- TH0=0X3c;
- TL0=0Xaf;
- //12M 晶振,65536-15536=50000,50000us*20=1000000us=1s
- TH1=0X3c;
- TL1=0X0af;
- }
- /*------------------------
- 鍵盤掃描函數(shù)
- --------------------------*/
- void key_scan()
- {
- if(!P10)
- {
- delay_ms(70);
- if(!P10)
- count_s+=30; //時(shí)間 +30秒
- if (count_s>6000)
- count_s=0;
- }
-
- if(!P11)
- {
- delay_ms(70);
- if(!P11)
- count_s+=60; //時(shí)間 +1 分
- if (count_s>6000)
- count_s=0;
- }
- if(!P12)
- {
- delay_ms(70);
- if(!P12)
- count_s+=300; //時(shí)間+5分
- if (count_s>6000)
- count_s=0;
- }
- if(!P13)
- {
- delay_ms(70);
- if(!P13)
- count_s=0; //時(shí)間清零
- }
- if(!P14)
- {
- delay_ms(70);
- if(!P14)
- {if (pv<3)
- pv++; //檔位+1
- pv_j=pv*6+6; //加熱時(shí)間
- pv_l=30-pv_j; //冷卻時(shí)間
- }
- }
- if(!P15)
- {
- delay_ms(70);
- if(!P15)
- {if (pv>0)
- pv--; //檔位-1
- pv_j=pv*6+6;
- pv_l=30-pv_j;
- }
- }
- if(!P16)
- {
- delay_ms(70);
- if(!P16)
- {
- P22=1;
- if(count_s==0) //如果沒有設(shè)定時(shí)間,不加熱,定時(shí)器不工作
- {TR0=0;
- TR1=0;}
- else //如果已經(jīng)設(shè)定時(shí)間,則開始計(jì)時(shí),開始加熱
- {
- pv_j=6*pv+6;
- pv_l=30-pv_j;
- t_clr();
- TR0=1;
- TR1=1;
- P22=0;}
- }
- }
- if(!P17) //停止加熱,終止定時(shí)器
- {
- delay_ms(70);
- if(!P17)
- {P22=1;
- P23=0;
- TR0=0;
- TR1=0;
- }
- }
- }
- /*------------------------
- 時(shí)間變換為每個(gè)顯示位
- --------------------------*/
- void time_converter()
- {
- dis[0]=count_s/600; //取分的十位
- dis[1]=(count_s/60)%10; //取分的個(gè)位
-
- dis[2]=(count_s%60)/10; //取秒的十位
- dis[3]=(count_s%60)%10; //取秒的個(gè)位
- }
- /*------------------------
- 顯示函數(shù)
- --------------------------*/
- void display()
- {
-
- uchar t;
- uchar k;
- for(k=0;k<4;k++) //LED顯示
- {
- wei=1;
- P0=codecho[k];
- wei=0;
- P0=0xff;
- delay_ms(1);
- duan=1;
- P0=codevalue[dis[k]];
- duan=0;
- P0=0xff;
- delay_ms(1);
- }
- P3=codevalue[pv]; //顯示檔位 */
- while(!P24) //按鍵測(cè)試
- {
- for(t=0;t<4;t++)
- {
- wei=1;
- P0=codecho[t];
- wei=0;
- P0=0xff;
- delay_ms(1);
- duan=1;
- P0=codevalue[10];
- duan=0;
- P0=0xff;
- delay_ms(1);
- P3=codevalue[10];
- }
- }
- }
- /*------------------------
- 主函數(shù)
- --------------------------*/
- void main()
- {
- uchar n=200;
- P23=0;
- t_clr(); //初始化
- while(1)
- {
- key_scan(); //鍵盤掃描
- time_converter();//數(shù)值轉(zhuǎn)換
- display(); //顯示
- }
- }
- /*------------------------
- 定時(shí)器T0中斷
- --------------------------*/
- void t0() interrupt 1
- {
- TR0=0;
- TH0=0X3c;
- TL0=0Xaf;
- cyc0--;
- if (cyc0==0)
- {cyc0=20;
- count_s--; //時(shí)間-1S
- if (count_s==0) //如果定時(shí)已到
- {
- P22=1; //停止加熱,定時(shí)器終止
- TR0=0;
- TR1=0;
- P23=1;
- }
- else
- TR0=1; //繼續(xù)定時(shí)
- }
- else
- TR0=1;
-
- }
- /*------------------------
- 定時(shí)器T1中斷
- --------------------------*/
- void t1() interrupt 3
- {
- TR1=0;
- TH1=0X3c;
- TL1=0X0af;
- TR1=1;
- if (pv_j!=0) //需要加熱
- {cyc1--;
- if (cyc1==0)
- {cyc1=20;
- pv_j--;
- if (pv_j==0) //加熱時(shí)間到
- {
- P22=1; //否則,停止加熱,進(jìn)入冷卻階段
- }
- }
- }
- else if (pv_l!=0) //是否需要冷卻
- {cyc1--;
- if (cyc1==0)
- {cyc1=20;
- pv_l--;
- if (pv_l==0) //冷卻時(shí)間到
- {
- P22=0; //進(jìn)行加熱
- pv_j=pv*6+6;} //再次設(shè)定加熱時(shí)間
復(fù)制代碼

完整的資料包下載(含程序源碼 proteus仿真和ad畫的原理圖):
http://www.torrancerestoration.com/bbs/dpj-77955-1.html
|
|