找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机四路低频方波脉冲输出,可调脉宽 带仿真和源程序

[复制链接]
跳转到指定楼层
楼主
历时一周,做的四路低频方波脉冲输出,可调脉宽。
附件包括c程序以及Proteus仿真
原创,多多指教,谢谢

下面是proteus仿真原理图:


51单片机源程序:
  1. #include <REG52.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit LEVEL00=P1^0;//LEVEL,P1.2引脚上的电平值
  5. sbit LEVEL01=P1^1;//LEVEL,P1.2引脚上的电平值
  6. sbit LEVEL02=P1^2;//LEVEL,P1.2引脚上的电平值
  7. sbit LEVEL03=P1^3;//LEVEL,P1.2引脚上的电平值
  8. sbit P14=P1^4;//LEVEL,P1.2引脚上的电平值
  9. sbit P15=P1^5;//LEVEL,P1.2引脚上的电平值
  10. uchar highcount00,highcount01,highcount02,highcount03;        //记录高电平定时次数
  11. const uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; /*显示0~9*/
  12. uint x,y,z,m;
  13. uint n0,n1;
  14. uint count;
  15. void delay()
  16. {
  17.   uint i,j;
  18.   for(i=0;i<256;i++);
  19.     for(j=0;j<256;j++);
  20. }
  21. void stop(void) interrupt 0 using 1
  22. {
  23. TR0=!TR0;
  24. if(TR0==1)
  25. {x=x+10;y=y+10;z=z+10;m=m+10;count=count+5;
  26. if(count==95){x=0;y=0;z=0;m=0;count=0;}}
  27. }
  28. void sto(void) interrupt 2 using 3
  29. {
  30. if(TR0==1)
  31. {x=x-10;y=y-10;z=z-10;m=m-10;count=count-5;
  32. if(count<=0){x=0;y=0;z=0;m=0;count=0;}}
  33. }
  34. void timer0isr(void) interrupt 1 using 2
  35. {
  36.         TH0 = 0xD8;
  37.         TL0 = 0xF0;   //重置计数初值
  38.         highcount00++;           //溢出次数加1
  39.         if(highcount00== x)
  40.                 LEVEL00 = 0;  
  41.         if(highcount00== 200)
  42.         {
  43.                 LEVEL00 = 1;
  44.                 highcount00 = 0;
  45.         }
  46.         highcount01++;           //溢出次数加1
  47.         if(highcount01== y)
  48.                 LEVEL01 = 0;  
  49.         if(highcount01== 200)
  50.         {
  51.                 LEVEL01 = 1;
  52.                 highcount01 = 0;
  53.         }
  54.                 highcount02++;           //溢出次数加1
  55.         if(highcount02== z)
  56.                 LEVEL02 = 0;  
  57.         if(highcount02== 200)
  58.         {
  59.                 LEVEL02 = 1;
  60.                 highcount02 = 0;
  61.         }
  62.                 highcount03++;           //溢出次数加1
  63.         if(highcount03== m)
  64.                 LEVEL03 = 0;  
  65.         if(highcount03== 200)
  66.         {
  67.                 LEVEL03 = 1;
  68.                 highcount03 = 0;
  69.         }

  70. }

  71. void main(void)
  72. {

  73. x=10;y=20;z=30;m=40;
  74. count=5;
  75. IT0=1;
  76. IT1=1;
  77. EX1=1;
  78. EX0=1;
  79.         highcount00 = 0;          //记录高电平定时次数
  80.         highcount01 = 0;
  81.         highcount02 = 0;
  82.         highcount03 = 0;
  83.         TMOD = 0x01;  //设定T/C0工作在定时器方式1
  84.         LEVEL00 = 1;        //初始电平为高
  85.         LEVEL01 = 1;        //初始电平为高
  86.         LEVEL02 = 1;        //初始电平为高
  87.         LEVEL03 = 1;        //初始电平为高
  88.         TH0 = 0xD8;
  89.         TL0 = 0xF0;         //装载计数初值
  90.         EA = 1;                 //开总中断
  91.         ET0 = 1;         //开T/C0中断
  92.     TR0 = 1;         //启动T/C0
  93.         while(1)
  94.         {n0=count/10;
  95.         n1=count%10;
  96.     P2=tab[n0];
  97.     P14=1;
  98.     delay();
  99.     P14=0;
  100.     P2=tab[n1];
  101.     P15=1;
  102.     delay();
  103.     P15=0;
  104. }


  105. }
复制代码

所有资料打包下载:
四路低频方波脉冲可调脉宽.rar (64.76 KB, 下载次数: 27)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:123133 发表于 2016-11-24 16:32 | 只看该作者
吓我一跳,我还以为是单片机输出祝四路可调频率的方波呢,
看来51是无法实现4路频率可调的方波的额
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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