【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务 |
您所在的位置:网站首页 › 51单片机控制8个led灯 › 【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务 |
学习目标: 学习普中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 |