欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
LCD1602顯示PWM頻率和占空比 單片機(jī)源程序Proteus仿真
[打印本頁]
作者:
哈哈151-
時間:
2020-3-15 11:10
標(biāo)題:
LCD1602顯示PWM頻率和占空比 單片機(jī)源程序Proteus仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(16.03 KB, 下載次數(shù): 75)
下載附件
2020-3-15 12:08 上傳
單片機(jī)源程序如下:
#include<reg52.h>
#include "LCD1602.H"
#define uchar unsigned char
#define uint unsigned int
unsigned int fr=50; //頻率 50hz
unsigned char dc=50;//50%占空比
uchar fr_g=0;
uchar fr_s=0;
uchar dc_g=0;
uchar dc_s=0;
/* 配置并啟動 PWM,fr-頻率,dc-占空比 */
unsigned int high,low;
unsigned long tmp;
unsigned char HighRH = 0; //高電平重載值的高字節(jié)
unsigned char HighRL = 0; //高電平重載值的低字節(jié)
unsigned char LowRH = 0; //低電平重載值的高字節(jié)
unsigned char LowRL = 0; //低電平重載值的低字節(jié)
void ConfigPWM();
void ClosePWM();
sbit key1=P3^1; //定義按鍵位置 加占空比
sbit key2=P3^0; //定義按鍵位置 減占空比
sbit PWMOUT = P2^1;
/********************************************************************
//* 名稱 : Delay_1ms()
//* 功能 : 延時子程序,延時時間為 1ms * x
//* 輸入 : x (延時一毫秒的個數(shù))
//* 輸出 : 無
//***********************************************************************/
void Delay_1ms(uint i)//1ms延時
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void key()
{
if(!key1) //按下相應(yīng)的按鍵,數(shù)碼管顯示相應(yīng)的碼值
{ Delay_1ms(10);
if(!key1)
{
if(dc++>=100)dc=100;
}
while(!key1);
}
if(!key2)
{
Delay_1ms(10);
if(!key2)
{
if(dc--<=0)dc=100;
}
while(!key2);
}
}
void ConfigPWM()
{
tmp = (11059200/12) / fr; //計(jì)算一個周期所需的計(jì)數(shù)值
high = (tmp*dc) / 100; //計(jì)算高電平所需的計(jì)數(shù)值
low = tmp - high; //計(jì)算低電平所需的計(jì)數(shù)值
high = 65536 - high + 12; //計(jì)算高電平的重載值并補(bǔ)償中斷延時
low = 65536 - low + 12;//計(jì)算低電平的重載值并補(bǔ)償中斷延時
HighRH = (unsigned char)(high>>8); //高電平重載值拆分為高低字節(jié)
HighRL = (unsigned char)high;
LowRH = (unsigned char)(low>>8); //低電平重載值拆分為高低字節(jié)
LowRL = (unsigned char)low;
TMOD &= 0xF0; //清零 T0 的控制位
TMOD |= 0x01; //配置 T0 為模式 1
TH0 = HighRH; //加載 T0 重載值
TL0 = HighRL;
ET0 = 1; //使能 T0 中斷
TR0 = 1; //啟動 T0
PWMOUT = 1; //輸出高電平
}
/* 關(guān)閉 PWM */
void ClosePWM()
{
TR0 = 0; //停止定時器
ET0 = 0; //禁止中斷
PWMOUT = 1; //輸出高電平
}
void main()
{uint i;
LCD1602_Init(1,0,0);//lcd1602初始化
Delay_1ms(100);
LCD1602_DisplayChar(1,2,':');//顯示e
LCD1602_DisplayChar(2,1,'d');//顯示p
LCD1602_DisplayChar(2,2,':');//顯示:
LCD1602_DisplayChar(1,6,'H');//顯示t
LCD1602_DisplayChar(1,7,'Z');//顯示e
LCD1602_DisplayChar(2,6,'%');//顯示t
LCD1602_DisplayChar(1,1,'f');//顯示t
TMOD = 0x00;
TL1 = 0xD8;
TH1 = 0xf0;
TR1 = 1; //啟動定時器
ET1 = 1; //使能定時器中斷
EA = 1; //開總中斷
while(1)
{
key();
ConfigPWM();
for (i=0; i<40000; i++);
fr_g = fr%10;
fr_s = fr /10;
dc_g = dc%10;
dc_s = dc/10;
LCD1602_DisplayChar(1,4,fr_s+48);//顯示t
LCD1602_DisplayChar(1,5,fr_g+48);//顯示e
LCD1602_DisplayChar(2,4,dc_s+48);//顯示p
LCD1602_DisplayChar(2,5,dc_g+48);//顯示:
}
}
/* T0 中斷服務(wù)函數(shù),產(chǎn)生 PWM 輸出 */
void InterruptTimer0() interrupt 1
{
if (PWMOUT == 1)
{ //當(dāng)前輸出為高電平時,裝載低電平值并輸出低電平
TH0 = LowRH;
TL0 = LowRL;
PWMOUT = 0;
}
else
{ //當(dāng)前輸出為低電平時,裝載高電平值并輸出高電平
TH0 = HighRH;
TL0 = HighRL;
PWMOUT = 1;
}
}
void TM1_Isr() interrupt 3 using 1
{
key();
}
復(fù)制代碼
全部資料51hei下載地址:
lcd1602顯示PWM頻率和占空比1.rar
(66.36 KB, 下載次數(shù): 100)
2020-3-15 11:08 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
11234
時間:
2020-3-16 22:02
感謝分享 下來看看
作者:
chinarenxx
時間:
2020-3-17 01:14
最近看到有些傳感器輸出的是PWM信號,不知道大神能不能寫個檢測PWM值的程序。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1