proteus做流水灯,用proteus和keilc实现流水灯 首发

有生之年之空白 阅读:30次 时间:2024-12-08 11:44:46
最佳经验
由作者撰写原创经验并推荐置顶

在日常生活中,我们经常会看到一排led灯,按着顺序一个一个的亮,而且是亮过就灭,在实验中我们成为流水灯,现在来看看如何在使用按键的情况实现吧,以下内容是由微蓝经验网用户发布proteus做流水灯,用proteus和keilc实现流水灯,希望对于用户有一定帮助,为朋友进行解决疑惑,如若想了解更多相关内容,可以向底部移动了解更多与本教程文章相关解决经验方法!

工具与材料

proteus;keilc

方法/步骤
  1. 1/4

    首先要明白流水灯的实现原理,当K1~K2分别按下时,经(P0 & 0X0F)运算得到的相应键值分别为0x0e、0x0d、0x0b、0x07,而无键按下时的键值为0x0f,因此,按键状态可以依据(P0 & 0X0F)是否等于0x0f进行判断,说明:设置两个标志位:启停标志run(1表启动,0表停止),方向标dir(1表自上而下循环,0表自下而上循环),实现的功能:K1是总开关,当K1首次按下时,流水灯由下往上流动;当K2按下时停止流动;当K3按下时,使灯由上往下流动;K4则是由下往上流动。

  2. 2/4

    思路:先判断是哪个键按下,K1为启动位,K2为停止,K3和K4转向,按照这个思路写出keilc代码:

    #include "reg51,h"

    unsigned char led[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

    void delay(unsigned char time){

    unsigned int j = 15000;

    for(;time > 0; time--)

    for(;j > 0;j--);

    }

    void main(){

    bit dir = 0,run = 0;

    char i;

    while(1){

    switch(P0 & 0x0f){

    case 0x0e:run = 1;break;

    case 0x0d:run = 0,dir = 0;break;

    case 0x0b:dir = 1;break;

    case 0x07:dir = 0;break;

    }

    if(run)

    if(dir)

    for(i = 0; i < 8; i++){

    P2 = led[i];

    delay(200);

    }

    else

    for(i = 7;i >= 0;i--){

    P2 = led[i];

    delay(200);

    }

    else P2 = 0xff;

    }

    }

    然后生成hex文件,一般写完keilc代码并生成hex文件后会产生如下所示的目录。

    proteus做流水灯,用proteus和keilc实现流水灯
  3. 3/4

    根据以上思路画出电路图,如下所示:

    proteus做流水灯,用proteus和keilc实现流水灯
  4. 4/4

    之后,将hex文件导入80c51中即可执行,已测试,执行完好,至于如何画电路图和生成hex文件,在以前的经验中都有涉及。

注意与说明

一定要注意电阻的阻值,电路图中比较靠上的电阻阻值均为10k,与led等相连的电阻阻值都为100,若电阻阻值搞错,很有可能导致led灯不亮,以上经验结束,与proteus做流水灯,用proteus和keilc实现流水灯有关的经验教程内容,若解决问题请点击“有用”,没有解决请向下浏览“相关”内容或点击“无用”平台积极改进优质原创的内容文章,点击下方工具分享给更多的朋友吧!

相关评论发表评论

声明 未经许可,请勿转载。

AT89C51单片机流水灯c语言程序及详解
怎么打印中国银行交易流水,千万要学习!
余额宝 流水-余额宝流水怎么打印出来?
如何制作流水EAN-8商品条码,不得不学!
摩尔庄园中哪里查看摩尔灯类型,看完之后你也会了!
震惊,奇迹暖暖中如何查看极地迷灯<一定要收藏>
时控开关可以直接接灯吗?看完这个你就会了!
键盘右上角第三个灯怎么关
dell笔记本键盘灯怎么开

新手帮助反馈投诉免责声明服务协议

© 2025 VLPOS.com 版权所有 微蓝网 ICP备案号:黑ICP备20003952号-1