目录
一.外设介绍
1.LED
VCC为正级 经过限流电阻 当左边输出低电频时LED被点亮
2.独立按键
a.原理
轻触按键:相当于是一种电子开关,按下是开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开
按键之间并联连接,实现每个按键相互独立。对每一个按键,都通过P3的一位,即一个IO口与单片机相连。按键的按下与否,对于内置电路来说,是联通状态的变化,这种变化以电平的方式(1或0)在单片机内进行表示按键的状态(0为低电平,按下;1为高电平;未按下)
b.消抖
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动
按下按钮后,延迟20ms,用while循环将抖动循环消除,达到消除振动不良影响的作用
具体代码操作将在下面代码展示
3.数码管
对每一个数码管,都由八个LED组成,7个构成数字,1个用来标记小数点,用字母a,b,c,d,e,f,g,dp来表示
段选:
用三个单片机的IO口来实现段选,三位二进制表达八个显示口的选中
位选:
P0组成的八位二进制数,每一位1或者是0代表一个电平状态,通过对8个P0口设置高低电平来控制亮暗来
二.LED流水灯
#include <REGX52.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{ while(1)
{
P2=0XFE;
Delay500ms();
P2=0xFD;
Delay500ms();
P2=0xFB;
Delay500ms();
P2=0xF7;
Delay500ms();
P2=0xEF;
Delay500ms();
P2=0xDF;
Delay500ms();
P2=0xBF;
Delay500ms();
P2=0x7F;
Delay500ms();
}
}
三.独立按键控制LED
#include <REGX52.H>
void Delay(unsigned int x)
{
while(x){
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
x--;
}
}
void main()
{ int x=0;
while(1)
{
if(P3_1==0)
{
Delay(20);
if(P3_1==1){
if(x>=8)
x=0;
P2=~(0x01<<x);
x++;
}
}
if(P3_0==0)
{
Delay(20);
if(P3_0==1){
if(x==0)
x=8;
else {x--;
P2=~(0x01<<x);
}
}
}
}
}
四.独立按键控制数码管
#include <REGX52.H>
void Delay(int x);
unsigned char number []={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
void Net(unsigned char location,place)
{ switch(location)
{
case 1:P2_4=1; P2_3=1; P2_2=1;break;
case 2:P2_4=1; P2_3=1; P2_2=0;break;
case 3:P2_4=1; P2_3=0; P2_2=1;break;
case 4:P2_4=1; P2_3=0; P2_2=0;break;
case 5:P2_4=0; P2_3=1; P2_2=1;break;
case 6:P2_4=0; P2_3=1; P2_2=0;break;
case 7:P2_4=0; P2_3=0; P2_2=1;break;
case 8:P2_4=0; P2_3=0; P2_2=0;break;
}
P0=number[place];
P0=0x00;
}
main()
{ while(1)
{
Net(2,8);
}
}
void Delay(int x)
{
while(x--)
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
}
while (--i);
}
}