要求:脈沖測量儀:利用MCS-51系統(tǒng)的T0和T1,測量脈沖周期和點空比,測量結果顯示的LED或LCD顯示器上。仿真說明1、在仿真圖中,通過p32按鍵輸入模擬脈沖(手動輸入模擬)
2、也可將單刀雙擲開關擲向脈沖一端,觀察數(shù)值
LCD顯示格式: 周期: xxxu HIGHT
占空比:xx% xxxu
(u表示單位us;
HIGHT表示高電平時間;
占空比=高電平時間/周期)
開發(fā)環(huán)境:protues7.8 keil
程序說明:
void delay(long num) 延時函數(shù)
void Interrupt_Init() 定時器中斷設置
void w_data(uchar dat) 寫數(shù)據(jù)
void w_cmd(uchar cmd) 寫命令
void w_string(uchar addr_start,uchar *p) 發(fā)送字符串到LCD
void Init_LCD1602(void) 初始化1602LCD
void main() 主程序
void EXTI0 () interrupt 0 中斷服務程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖片1.png (50.8 KB, 下載次數(shù): 55)
下載附件
2020-7-3 15:42 上傳
源程序:(僅展示部分內容,全部需下載附件查看)
#include<reg52.h> #define uchar unsigned char #define uint unsigned int
sbit RS=P2^0; sbit RW=P2^1; sbit EN=P2^2; uchar count = 0; bit flag = 1; long PWM_PER; long Pwm_High; void delay(long num) { while(num--); }
void Interrupt_Init() { TMOD = 0x19; TH1 = 0; TL1 = 0; TH0 = 0; TL0 = 0; IT0 = 1; IT1 = 1; //TR0 = 1; EX0 = 1; EA = 1; }
void w_data(uchar dat) { RS=1; P0=dat; delay(500); EN=1; delay(500); EN=0; }
void w_cmd(uchar cmd) { RS=0; EN=0; P0=cmd; delay(500); EN=1; delay(500); EN=0; }
void w_string(uchar addr_start,uchar *p) { w_cmd(addr_start); while(*p!='\0') { w_data(*p++); } }
void Init_LCD1602(void) { RW=0; w_cmd(0x38); w_cmd(0x0C); w_cmd(0x06); w_cmd(0x01); w_cmd(0x0F); }
void main() { uint Pwm_percentage; Init_LCD1602(); Interrupt_Init(); w_string(0x80,"PER:"); w_string(0x80+9,"u"); w_string(0x80+11,"HIGHT"); w_string(0xc0,"DUT:"); w_string(0xc0+8,"%"); w_string(0xc0+15,"u");
while(1) {
if(flag) { w_cmd(0x84); w_data(0x30+PWM_PER/10000); w_data(0x30+PWM_PER%10000/1000); w_data(0x30+PWM_PER%1000/100); w_data(0x30+PWM_PER%100/10); w_data(0x30+PWM_PER%10);
w_cmd(0xC4); w_data(0x30+Pwm_percentage/100); w_data(0x30+Pwm_percentage%100/10); w_data(0x2e); w_data(0x30+Pwm_percentage%10); }
全部資料51hei下載地址:
protues仿真.zip
(49.5 KB, 下載次數(shù): 63)
2020-7-3 15:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
keil程序.zip
(34.83 KB, 下載次數(shù): 57)
2020-7-3 15:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|