独立键盘调节PWM的程序
/*
程序名:单片机的PWM实验。
编写人:曾文豪杰
编写时间:2012年10月13日
硬件环境:STC89C52单片机,12M晶振,2块74HC573锁存器,4位一体共阴数码管。两个触点键盘。
接口说明:74HC573锁存器数据输入口依次接单片机P2口,段选接P1.6,位选接P1.7
*/
#include <reg52.h>
/******************************************************************/
作用:变量宏定义
备注:
/******************************************************************/
#define uchar unsignd char
#define uint unsigned int
/******************************************************************/
作用:IO口定义
备注:PWM方波输出口接P1.0,74HC573段选接P1.6,位选接P1.7PWM方波输出口接P1.0。两个独立键盘接P3.4和P3.5.分别控制PWM方波的高电平增量和减量
******************************************************************/
sbit shuchu=P1^0;
sbit dula=P2^6;
sbit wela=P2^7;
sbit jia_key=P3^4;
sbit jian_key=P3^5;
uchar a,b;
******************************************************************/
作用:八位共阴数码管编码,码表为不带小数
备注:如果想调用小数,可以这样写: table【?】|0x80;
******************************************************************/
uchar code table[]={0x3f,0x06,0x5b,0x4f, //0-3
0x66,0x6d,0x7d,0x07, //4-7
0x7f,0x6f}; //8-9
******************************************************************/
函数名:微秒级延时子程序
调用:delayus(?)
参数:0~65535
******************************************************************/
void delayus(uint xms)
{
uint i;
for(i=xms;i>0;i--);
}
******************************************************************/
函数名:键盘子程序
调用:key()
作用:按下jia时实现增大调节PWM方波的占空比,按下jian时实现减小调节PWM方波的占空比。调节级数为100级。
******************************************************************/
void key()
{
if(jia_key==0)
{
delayus(1200);
if(jia_key==0)
{
if(a!=100)
a=a+1;
else
a=100;
while(!jia_key);
}
}
if(jian_key==0)
{
delayus(1200);
if(jian_key==0)
{
if(a!=0)
a=a-1;
else
a=0;
while(!jian_key);
}
}
b=100-a;
}
******************************************************************/
函数名:显示子程序
作用:只是提供感性的PWM方波的占空比情况,并不是精确的。
调用:display(?)
参数:0~255
******************************************************************/
void display(uchar temp)
{
uchar bai,shi,ge;
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
dula=1;
P0=table[bai];
dula=0;
P0=0xfe;
wela=1;
wela=0;
delayus(120);
dula=1;
P0=table[shi];
dula=0;
P0=0xfd;
wela=1;
wela=0;
delayus(120);
dula=1;
P0=table[ge];
dula=0;
P0=0xfb;
wela=1;
wela=0;
delayus(120);
}
******************************************************************/
函数名:主函数
******************************************************************/
void main()
{
uchar i;
a=100;
b=0;
while(1)
{
for(i=a;i>0;i--) //输出低电平
{
shuchu =0;
display(a); //把显示和键盘扫描放在这里
key(); //可起到延时作用,一举两得
}
for(i=b;i>0;i--) //输出高电平
{
shuchu =1;
display(a); //把显示和键盘扫描放在这里
key(); //可起到延时作用,一举两得
}
}
}
帮你顶一个!
支持,帮顶
帮顶一个
支持、、顶
支持 试试看
顶一个!
好, 顶一个...
感谢分享~~~
收藏额啊啊啊啊
有问题?
收藏额啊啊啊啊
顶一个哦哦哦哦