51单片机入门(LED篇)

LED闪烁

当我们需要LED不断闪烁且有一个闪烁间隔时间时,可在STC.ISP上设置,如图:

软件延时计算器

但对于图中的_nop_加上一个头文件:#include<INTRINS.H>

并且要调用生成代码的主函数,即:Delay500ms

独立按键介绍

原有结构

按下时:中间的弹片被压扁,三个接触点就会被连接,四个引脚也全部被连接

松手时:中间的弹片不会被压扁

原理图:

第一个按键用P3_1表示;第二个按键用P3_0表示;第三个按键用P3_2表示;第四个按键用p3_3表示

当P3_1用0表示时说明按键按下,用1表示时说明松开;

例:if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
}

其中Delay是一个自己编写的延时函数,用来确定独立按键的状态(按下或松开)

这么做的理由:独立按键中间有个弹片,按下时弹片会在按下和松开两种状态下来回切换,20mm后弹片会趋于稳定。

数码管显示

静态

从单片机的左向右LED灯的序列依次减小(8>7>6----)

用代码使其亮灭的原理:先选中LED灯的序号,再控制abcdefg区域的亮灭

  1. 选中序号:

     

    当选中LED6时,如图所示对应Y5(选中LED4时,对应Y3)

    再用二进制表示5,即:101。

    用P2_2,P2_3,P2_4来对应三位数(规则;高位对高位)

    P2_4=1;  P2_3=0;   P2_2=1;

    当选中LED4时

    此时P2_4=0;P2_3=1;P2_2=1;

  2. 选中区域:

用P0来表示选中LED

当该区域亮时用1来表示,不亮时用0来表示

上图是LED灯表示为6时的示意图

分析:从下往上依次排开

                      0111 1101

转化为16进制:7     D

P0=0x7D;此时LED表示为6;

下图为0-9的断码

动态

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}
int Nixie(unsigned char Location,Number)
{
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=NixieTable[Number];
return 0;
}
int main()
{
while(1)
{
Nixie(1,1);
Nixie(2,2);
Nixie(3,3);
}
}

上图是实现LED灯显示数字的代码,但是上图代码并不正确

若用上图代码会使LED灯发生错乱,所以应进行消影或者使用延时函数(Delay)使其呈动态

消影:先关闭前一位显示、再更新下一位数据

int Nixie(unsigned char Location,Number)
{
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=NixieTable[Number];
在此处加上;Delay(1);(这是为了让其稳定的显示,否则显示后立即熄灭,在人眼中会感觉到暗
           P0=0x00;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值