找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2728|回复: 0
打印 上一主题 下一主题
收起左侧

单片机脉冲测量仪程序+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, 下载次数: 62)
keil程序.zip (34.83 KB, 下载次数: 56)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表