找回密码
 立即注册

QQ登录

只需一步,快速开始

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

方波发生器程序

[复制链接]
跳转到指定楼层
楼主
ID:114851 发表于 2016-4-18 01:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define unchar unsigned int
sbit D1=P2^0; //将D1位定义为P2.0引脚
sbit D2=P2^1; //将D2位定义为P2.1引脚
sbit D3=P2^2;
sbit D4=P2^3;
sbit D5=P2^4;
sbit A1=P2^2;
sbit B1=P2^3;
sbit C1=P2^4;  
sbit key1=P1^7;               
sbit key2=P1^6;       
sbit key3=P1^5;       
sbit key4=P1^4;
sbit key5=P3^2;       
sbit key6=P3^3;               
sbit pwm=P3^7;       
sbit xh=P2^7;                                                                                                  
void StartTime1(void);
unchar bai,shi,h1,ge,qian,bai1,qian1,ge1,shi1;
unchar k,h,b,e,e1,g,w;          
unchar code table[]={0x3f,0X06,0x5b,0x4f,0x66,0X6d,0x7d,0x07,0x7f,0x6f};
void display(unchar,unchar,unchar,unchar);
void display1(int a);
void delay(unchar);
void tiaopin(void);
void StartTime0(void);
void main(void)
{EA=1;//开总中断
IT0=1;
TR0=0;
TR1=0;
A1=0;
B1=0;
C1=0;
pwm=0;
h=1000;
StartTime0();
EX0=1;
IT1=1;
EX1=1;
while(1)
{display(qian,bai,shi,ge);
display1(e1);
}                                                                                                                                                                                                                                    
}
void display(unchar qian,unchar bai,unchar shi,unchar ge)//频率显示         
{
A1=0,B1=0,C1=0;
P0=table[ge];
delay(5);
P0=0xff;
A1=1,B1=0,C1=0;
P0=table[shi];
delay(5);
P0=0xff;
A1=0,B1=1,C1=0;
P0=table[bai];
delay(5);
P0=0xff;
A1=1,B1=1,C1=0;                                                                                                                    
P0=table[qian];
delay(5);                                  
P0=0xff;
}
void display1(int e1)
{  w=e1;   
bai1=w/100;         
shi1=w%100/10;
ge1=w%10;         
A1=0,B1=0,C1=1;
P0=table[ge1];
delay(5);          
P0=0xff;                                          
A1=1,B1=0,C1=1;
P0=table[shi1];
delay(5);
P0=0xff;
A1=0,B1=1,C1=1;
P0=table[bai1];
delay(5);
P0=0xff;
A1=1,B1=1,C1=1;
P0=table[qian1];                                                          
delay(5);          
P0=0xff;
}
void StartTime0(void)
{TMOD=0x12; //使用定时器T0,工作方式1
ET0=1;             
ET1=1;
PT1=1;                    
}
void int1(void) interrupt 2
{e++;
h=1000;
TR0=1;
TR1=1;
delay(100);
while(!key6);
}
void int0(void) interrupt 0  
{
TR0=0;
TR1=0;
tiaopin();//调频
b=100*bai+10*shi+ge;
if(b>18)
  {h=23364/b;
  TL0=236;
  TH0=236;   //初值
TR0=1;
  }
  else
  {TH1=(65536-1000)/256; //1毫秒初值,h=1000;
TL1=(65536-1000)%256;
  h=500/b;
  TR1=1;
}
}
void Time1(void) interrupt 3         
{ TH1=(65536-1000)/256; //1毫秒初值,h=1000;
TL1=(65536-1000)%256;
k++;
if(k==h)                          
{pwm=!pwm;
e1=e;
e=0;
k=0;}                                                                                                               
}                                                                 
void Time0(void) interrupt 1  
{k++;
if(k==h)
{pwm=!pwm;
k=0;}
}
void tiaopin()//调节方波频率
{TR0=0;
TR1=0;            
while(1)  
{display(qian,bai,shi,ge);
if(key1==0)
{delay(5);
if(key1==0)
{bai++;         
while(!key1);}
if(bai==10)
bai=0;}
if(key2==0)
{delay(1);
if(key2==0)
{shi++;         
while(!key2);}
if(shi==10)
shi=0;}
if(key3==0)
{delay(1);
if(key3==0)
{ge++;
while(!key3);}
if(ge==10)
ge=0;}
if(key4==0)
delay(1);
if(key4==0)
{delay(100);
if(key4==0)
break;}
}
}
void delay(unchar t)//延时函数
{unchar i,j;
for(i=t;i>0;i--)
for(j=5;j>0;j--);
}

                                            
                                             

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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