///////////////////////////////////////////////////////////////
////////A端口 数码管(共阴)的位选/////D端口数码管 段选
/////////RB0~3 按键(+上拉电阻) RC2 输出 蜂鸣器RE0
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31)
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}
uchar key_num,a,b,c
int pwm
bit pwmflag=0
void delay(uint x)
void init()
void scan()
void didi(uchar num)
void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6)
void main()
{
init()
while(1)
{
T2CON=0X7f //打开定时器2
PR2=255 //PWM 的工作周期(可以调整频率1/T)=(PR2+1)*4*Tosc*TMR2预分频比
CCPR1L=pwm //PWM匹配初值,调整占空比:x/y-PR2(PR2设定)
CCP1CON=0X3C//设置CCP1 模块为PWM 工作方式
TRISC=0XFB//设置CCP1 引脚为输出方式
//delay(20)
//if(pwmflag=0){pwm++}
// if(pwm>=255){pwmflag=1}
// if(pwmflag=1){pwm--}
// if(pwm<=30){pwmflag=0}
a=pwm/100b=pwm%100/10c=pwm%10
scan()
disp(key_num,2,3,a,b,c)
}
}
void delay(uint x)
{
uint a,b
for(a=xa>0a--)
for(b=110b>0b--)
}
void init()
{
TRISB=0xff
TRISD=0
TRISA=0
TRISE0=0
RE0=0
PORTD=0
PORTA=0
}
void scan()
{
if(RB0==0)
{
delay(10)
if(RB0==0)
{ pwm++
if(pwm>=255){pwm=1}
didi(1)
while(!RB0)
{
disp(key_num,2,3,a,b,c)
key_num=1//PORTD=0x01
}
}
}
if(RB1==0)
{
delay(10)
if(RB1==0)
{ pwm--
if(pwm<=1){pwm=255}
didi(1)
while(!RB1)
{
disp(key_num,2,3,a,b,c)
key_num=2//PORTD=0x02}
}
}
}
if(RB2==0)
{
delay(10)
if(RB2==0)
{ pwm+=50
if(pwm>=255){pwm=1}
didi(1)
while(!RB2)
{
disp(key_num,2,3,a,b,c)
key_num=3//PORTD=0x04
}
}
}
if(RB3==0)
{
delay(10)
if(RB3==0)
{ pwm-=50
if(pwm<=1){pwm=255}
didi(1)
while(!RB3)
{
disp(key_num,2,3,a,b,c)
key_num=4//PORTD=0x08
}
}
}
}
void didi(uchar num) //蜂鸣器
{
uchar di_num
for(di_num=numdi_num>0di_num--)
{
RE0=1
delay(50)
RE0=0
delay(20)
}
}
////////A端口 数码管(共阴)的位选/////D端口数码管 段选
void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6)
{
PORTD=table[num1]//显示第一个数码管
PORTA=0x20//0010 0000
delay(2)
PORTD=table[num2]//显示第二个数码管
PORTA=0x10//0001 0000
delay(2)
PORTD=table[num3]//显示第三个数码管
PORTA=0x08//0000 1000
delay(2)
PORTD=table[num4]//显示第四个数码管
PORTA=0x04//0000 0100
delay(2)
PORTD=table[num5]//显示第五个数码管
PORTA=0x02//0000 0010
delay(2)
PORTD=table[num6]//显示第六个数码管
PORTA=0x01//0000 0001
delay(2)
}
我想说 如果你懂proteus 你完全可以按照 他的原理图 自己分解开然后到 proteus仿真自己画 编程调试 。这样两样都可以学习。
据我目前了解 好像没有谁做过。感觉有模块是没法做到效果的 比如红外,超声波之类的。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)