标题: 单片机脉冲测量仪程序+Proteus仿真 [打印本页]
作者: 123。、、 时间: 2020-7-3 15:51
标题: 单片机脉冲测量仪程序+Proteus仿真
要求:脉冲测量仪:利用MCS-51系统的T0和T1,测量脉冲周期和点空比,测量结果显示的LED或LCD显示器上。仿真说明1、在仿真图中,通过p32按键输入模拟脉冲(手动输入模拟)
2、也可将单刀双掷开关掷向脉冲一端,观察数值
LCD显示格式: 周期: xxxu HIGHT
占空比:xx% xxxu
(u表示单位us;
HIGHT表示高电平时间;
占空比=高电平时间/周期)
开发环境:protues7.8 keil
程序说明:
void delay(long num) 延时函数
void Interrupt_Init() 定时器中断设置
void w_data(uchar dat) 写数据
void w_cmd(uchar cmd) 写命令
void w_string(uchar addr_start,uchar *p) 发送字符串到LCD
void Init_LCD1602(void) 初始化1602LCD
void main() 主程序
void EXTI0 () interrupt 0 中断服务程序
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
源程序:(仅展示部分内容,全部需下载附件查看)
#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, 下载次数: 63)
keil程序.zip
(34.83 KB, 下载次数: 57)
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |