標題:
單片機PWM調(diào)速程序+Proteus仿真
[打印本頁]
作者:
1216864428
時間:
2020-4-11 14:15
標題:
單片機PWM調(diào)速程序+Proteus仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(19.06 KB, 下載次數(shù): 34)
下載附件
2020-4-11 15:35 上傳
單片機源程序如下:
#include <REG52.H>
#include <STDIO.H>
#include <LM1602.H>
#include <BUTTON.H>
#include <DS18B20.H>
#include <Interface.H>
#define FOSC 11059200L //System frequency
#define BAUD 9600 //UART baudrate
sbit PWM = P3^5;
extern unsigned int frequency = 0; // 頻率
extern unsigned char Interface = 1; // 正在處于的界面
extern unsigned char Menu_option = 1; // 菜單選項
extern unsigned char hour = 8, min = 0, sec = 0; // 時間變量
extern bit update_time_state = 0; // 更新時間標志
extern bit update_temp_state = 0; // 更新溫度標志
extern unsigned int PWM_val; // PWM的設置等級
extern unsigned int time_count = 0; // 時鐘計時
void Initial(); // 系統(tǒng)初始化
void Timer_Init(); // 中斷初始化
void Count_second(); // 秒計更新計時
void Count_temp(); // 溫度更新計時
void PWM_control(); // PWM控制
void Main()
{
Initial();
while(1)
{
KeyProc();
Update_data();
}
}
void Timer1()interrupt 3
{
TL1 = 0x00; //設置定時初值
TH1 = 0xDC; //設置定時初值
Count_second();
Count_temp();
PWM_control();
}
void Uart()interrupt 4
{
if(RI) /* RI:串口接收中斷申請標志位 */
{
RI=0; //必須重新對RI清
}
}
void Count_second()
{
if(++time_count == 100)
{
time_count = 0;
update_time_state = 1 ;
frequency = TH0<<8 | TL0;
TH0 = TL0 = 0;
if(++sec == 60)
{
sec = 0;
if(++min == 60)
{
min = 0;
if(++hour == 24)
{
hour = 0;
}
}
}
}
}
void PWM_control()
{
static bit w;
static unsigned char count;
if(PWM_val == 0)
{
PWM = 0;
}
else if(PWM_val == 15)
{
PWM = 1;
}
else
{
if(w == 0)
{
if(++count == PWM_val)
{
count = 0;
PWM = 0;
w = 1;
}
}
else
{
if(++count == (15 - PWM_val))
{
count = 0;
PWM = 1;
w = 0;
}
}
}
}
void Count_temp()
{
static unsigned int temp_count;
if(++temp_count == 20)
{
temp_count = 0;
update_temp_state = 1;
}
}
void Timer_Init()
{
SCON=0x50;
T2CON=0x34;
TH2=RCAP2H=(65536-(FOSC/32/BAUD)) >> 8;
TL2=RCAP2L=(65536-(FOSC/32/BAUD));
ES=1;
ET1 = 1;
TMOD = 0x15;
TL1 = 0x00; //設置定時初值
TH1 = 0xDC; //設置定時初值
TR1 = 1;
TR0 = 1;
TF0 = 0;
EA = 1;
}
void Initial()
{
DS18B20();
Init_1602();
display_1602(0,0,"*Function Board*");
display_1602(1,1,"Welcome to use");
Timer_Init();
while((P2&0x1e) == 0x1e);
while((P2&0x1e) != 0x1e);
Init_1602();
display_1602(0,0,"Function Menu: ");
Updata_Menu(Menu_option);
Timer_Init();
}
復制代碼
全部資料51hei下載地址:
電子工程實訓.zip
(157.25 KB, 下載次數(shù): 57)
2020-4-11 14:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
aqiang123
時間:
2020-4-16 15:45
好的 十分感謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1