標題:
單片機PWM調溫 無反應 求幫助
[打印本頁]
作者:
會有的123HYD
時間:
2020-7-2 10:17
標題:
單片機PWM調溫 無反應 求幫助
主要通過Protues和Keil聯(lián)合仿真
單片機源程序如下:
#include <reg52.h>
//#include <at89x52.h>
//#include <keyscan.h>
extern void scan_full(void);
extern unsigned char key_scan(void);
extern bit key_ok;
unsigned char pwm_set,key_value;
unsigned char count;
sbit PWM=P3^6;
bit up,down,set_flag;
unsigned char code BCD[]={0x3f,0x06,0x5b,0x4f, //此處是將0-F轉換成相應的BCD碼
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay1(unsigned char t)
{
while(t--);
}
void pwm(void) interrupt 5//定時器2產(chǎn)生PWM波形
{
TF2=0; //定時器2的溢出標志要軟件清除,
//但當RCLK或TCLK為1時由硬件清除
if((count>=pwm_set)&&(count<10))
PWM=1;
else PWM=0;
count++;
if(count==10)
count=0x00;
}
void key_pwm(unsigned char x)//把鍵值轉化為PWM設置值
{
switch(x) //把矩陣鍵盤轉化為獨立鍵盤
{
case 1:up=1;break;
case 2:down=1;break;
case 3:set_flag=!set_flag;break;
default:break;
}
if(up&&set_flag) //設置PWM參數(shù):pwm_set
{
pwm_set++;
up=0;
if(pwm_set>=10)
pwm_set=0x00;
}
if(down&&set_flag)
{
pwm_set--;
down=0;
if(pwm_set==0xff)
pwm_set=9;
}
if(!set_flag)
{
up=0;
down=0;
}
}
void main(void)
{
TH2=0xb1; //定時20MS
TL2=0xe0;
RCAP2H=0xb1;//定時器2溢出時會把這個單元的內容送到TH2和TL2中
RCAP2L=0xe0;
EA=1;
ET2=1;
TR2=1;
while(1)
{
scan_full(); //看是否有鍵按下
if(key_ok) //有鍵按下,則判斷到底是哪個鍵按下
{
key_value=key_scan();//鍵值送key_value暫存
P0=~BCD[key_value]; /*此三句是將鍵值顯示出來*/
P2=0xfe; /** */
delay1(200); /*************************/
key_pwm(key_value); //調用鍵值轉PWM設置參數(shù)函數(shù)
key_value=0x00; //清除鍵值,以免一次按下,多次響應
}
P0=~BCD[pwm_set]; /***此三句是將pwm_set值顯示出來*/
P2=0xfd; /******* */
delay1(200); /****************************/
}
}
復制代碼
所有資料51hei提供下載:
PWM調溫.zip
(55.67 KB, 下載次數(shù): 3)
2020-7-2 10:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
51hei圖片20200702095442.png
(121.91 KB, 下載次數(shù): 52)
下載附件
2020-7-2 10:16 上傳
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1