【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务

您所在的位置:网站首页 51单片机控制8个led灯 【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务

【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务

2023-12-17 10:14| 来源: 网络整理| 查看: 265

 

学习目标:

        学习普中51单片机的按键控制led灯。

电路图:

                    

学习内容:

        LED灯的十六进制怎么算???

        在这给大家算一下:首先先看一下LED模块的电路图!

        

        实物图:

                

可以把    

        D1        D2         D3        D4        D5        D6        D7        D8

看成

        1           1           1           1           1           1           1           1

如:

D1D2D3D4D5D6D7D811111111

十六进制1位   对   二进制   四位

则        

 

0123456789ABC0000000100100011010001010110011110001001101010111100

       下图接上图后:

DEF110111101111

根据上图可以知道  十六进制  和  二进制  的一一对应。

        根据电路图又知   当   低电平   的时候   led灯点亮   即低电平有效。

        在数字电路中     1  代表  高电平    0  代表    低电平

还有一个就是需要知道实物的编码方式:

D1 ——>  D8

所有led灯熄灭    则    111111111     十六进制就是    0xFF

如果我想要   右边第一个led灯亮     111111110 

注:这里要明白   左边 1111   右边1111 

                左边的1111控制的是右边的四个灯

                右边的1111控制的是左边的四个灯

所有想要右边第一个灯亮      则    就是    0x7F

比如      我想要   右边第二个灯亮     1111 1101     就是0xBF  (可以理解为就是反着来)

说明:1101   是从左到右  的    1+2+8  = 11 = B

(本文这样计算  只针对普中51单片机)

由于   上文可知

右边第三个灯亮          1111 1011       0xDF

右边第四个灯亮          1111 0111       0xEF

左边第一个灯亮          0111 1111       0xFE   

说明: 0111  是从左到右  的   2+4+8 = 14 = E

左边第二个灯亮          1011 1111       0xFD

左边第三个灯亮          1101 1111       0xFB

左边第四个灯亮          1110 1111       0xF7

由此    即讲完了   十六进制   控制   P2   亮指定灯     后续又代码   大家也可参考!

 

学习内容:

题目:

        用汇编或C语言实现霓虹灯效果:         1)开始D1、D2、D3、D4、D5、D6、D7、D8,全灭,         2)等待按键KEY1按下松开后D4->D3->D2->D1和D5->D6->D7->D8同时间隔约0.2秒逐次点亮后,从D8->D7->D6->D5->D4->D3->D2->D1逐次间隔0.3秒灭掉,循环执行D4->D3->D2->D1和D5->D6->D7->D8同时间隔约0.2秒逐次点亮后,从D8->D7->D6->D5->D4->D3->D2->D1逐次间隔0.3秒灭掉;重复以上现象。         3)按键再一次按下后:D1->D2->D3->D4和D8->D7->D6->D5同时间隔0.2秒逐次点亮后,从D8->D7->D6->D5->D4->D3->D2->D1逐次间隔0.3秒灭掉;重复以上现象。 4)等按键按下后,分别重复1)2) .... ...

代码如下:

#include sbit key1 = P3^1; #define uint unsigned int #define uchar unsigned char void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { int i,j,key=1; while(1) { if(key1 == 0) { delay(20); if(key1 == 0) { key +=1; } if(key == 2) { for(j=0;ji); delay(300); } } } if(key == 3) { for(j=0;ji); delay(300); } } } } } } /* P2=0XF7; delay(200); P2=0XF3; delay(200); P2=0XF1; delay(200); P2=0XF0; delay(200); P2=0xEF; delay(200); P2=0xCF; delay(200); P2=0x8F; delay(200); P2=0x0F; delay(200); */ 学习内容:

题目 

       用汇编或者c语言实现

        1)初始状态所有灯火。         2)等按键K3第一次按下松开后D1->D2->D3->D4->D5->u0->L? v0 b0NO 『T 秒亮后,等全亮后,冉从D8->Dr-5.山U流水虹效里掉,重复上面的全亮到全灭重复执行;出现流水灯效果。         3)按键K3第二次按下松开后出现跑马灯效果         4)按键再一次按下后,重复2)3)现象。

代码如下:

#include #include "intrins.h" sbit key1 = P3^2; #define led P2 #define uint unsigned int #define uchar unsigned char void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { int i,j,key=1,a = 1; P2 = 0xFF; delay(500); while(1) { if(key1 == 0) { delay(20); if(key1 == 0) { key +=1; } if(key == 2 && a == 1) { for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3