1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 点亮LED灯--制作流水灯

点亮LED灯--制作流水灯

时间:2021-06-11 16:02:54

相关推荐

点亮LED灯--制作流水灯

原始知识: 通过查看CT107D单片机原理图得知单片机通过P0来控制8个LED灯;

由于基本处于新手状态,看了一点单片机视频(此前并未有过实操),没有注意到M74HC573元件控制受P0和Y4C共同控制,也不知这是锁存器,通过资料补缺得知这是锁存器,还需要译码器来解锁;

由上得知Y4C受WR和Y4控制,而WR在CON3控件,在这块板子里2和3是连接起来的,所以WR一直处于低电平0;所以就转向看Y4;

Y4受到P25 P26 P27 控制,所以要控制LED亮起来,单片机必须控制P0和P2部分引脚;

通过原理图可知Y4控制解锁控制LED灯的锁存器(74HC138);

所以可以 P2 = (P2&0x1F|0x80); 设置 P2^ 7 P2^ 6 P2^5 100指向Y4;

同理可以关闭外设(例如蜂鸣器);P2 = (P2&0x1F|0xA0);指向Y5;置P0 = 0;

void cls_buzz(void){P0 = 0xFF; //准备LED全部灭掉P2 = P2 & 0x1F | 0x80; // P27~P25 清零,再定位 Y4C ---4的倍数8P2 &= 0x1F; // P27~P25 清零P0 = 0;//准备关闭外设P2 = P2 & 0x1F | 0xA0; // P27~P25 清零,再定位 Y5C ----5的倍数AP2 &= 0x1F;//将打开的锁存器关闭,使任何一个锁存器都打不开}

初始化以后,就可以开始对流水灯更进一步了;

如何操控出流水灯了;二进制确实是很棒的设置;它可以通过位转换实现流水灯;通过0x1向右按位移动,实现位的转换(实际上数值倍数形式扩展)

0x1>>n;

for(i=0; i<8; i++){P2 = ((P2&0x1f)|0x80);//译码器指向Y4进而解锁控制LED灯的锁存器;P0 = ~(0x01<<i); //1向左移位i位,再反转为0,输入为0 Led灯亮;P2 &= 0x1f;//上锁(译码器不指向任何锁码器)delay(i);//等待}

通过for循环,i的递增实现流水灯;

最终代码如下:

#include <stc15f2k60s2.h>#include <intrins.h>void cls_buzz(void){P2 = (P2&0x1F|0xA0);//P2^7 P2^6 P2^5101 控制译码器Y5作用于控制外设的锁存器解锁;P0 = 0x00;//设P0为0;把外设都关闭(包括蜂鸣器)P2 &= 0x1F;//上锁(译码器不指向任何锁码器)}void delay(unsigned char x){while(x--){unsigned char i, j, k;_nop_();_nop_();i = 9;j = 104;k = 139;do{do{while (--k);} while (--j);} while (--i);}}unsigned char i;void main(){cls_buzz();while(1){for(i=0; i<8; i++){P2 = ((P2&0x1f)|0x80);//译码器指向Y4进而解锁控制LED灯的锁存器;P0 = ~(0x01<<i); //1向左移位i位,再反转为0,输入为0 Led灯亮;P2 &= 0x1f;//上锁(译码器不指向任何锁码器)delay(i);//等待}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。