找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2822|回复: 0
打印 上一主题 下一主题
收起左侧

单片机按键控制的流水灯Proteus仿真代码等资料

[复制链接]
跳转到指定楼层
楼主
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


    熟练掌握Keil和Proteus软件的C51设计与仿真操作
    熟练掌握并行口P口的编程
    熟悉C51编程的变量、存储等概念及使用方法
    初步掌握延时程序的原理,初步掌握P口的输入检测编程

    实验要求

    电路图设计:
        可以用P1或更多的P口分别连接八个LED灯进行组合
        可以用四个P口连的LED灯构成一个4×8的矩阵
        可以用不同数量的LED等构成一个特定图案
    程序要求:
        要尽量考虑for、while、switch、函数等用途,巩固C语言设计能力
        各种效果可以考虑做成函数,通过按键进行不同函数的调用
    效果提示:
        常规流水灯效果
        多种流水灯效果切换
        多种流水灯以某种规律切换

    实验实现的功能说明

P1、P2口分别接在第一、第二排LED灯上,利用开关SW1和SW2分别控制LED灯的不同运作,当开关SW1按下时,第一排LED灯从左到右按顺序点亮,再由右到左顺序点亮;断开开关SW1,闭合开关SW2,第二排LED灯两边向中间依次点亮,形成汇中的效果。

    实验实现的原理及仿真电路设计

实验原理:本次实验使用十六个四种颜色的LED灯排成两排,用if语句选择开关SW1和SW2,按下SW1时,利用for循环和左移i位,右移8-i为相或实现LED灯从左到右依次点亮的流水灯效果,同理再得到由右向左的流水灯效果,左右依次循环。按下SW2时,设定最左和最右的初始值,用for循环循环四次,实现流水灯汇中。

实验原理电路图:



  • 实验流程图:

  • 实验主要功能代码


声明开关按键:
sbit SW1=P3^0;
sbit SW2=P3^1;

延时程序:

void delay(unsigned int m)
{
              while(m--);
}



当开关SW1按下时,流水灯的工作:

                            if(SW1==0)
                            {            
t=0x01;

                                          P1=t;
                                          for(i=0;i<8;i++)
                                          {
                                                        a=t<<i;
                                                        b=t>>(8-i);
                                                        P1=a|b;
                                                        delay(20000);
                                          }

                                          for(i=1;i<8;i++)

                                          {

                                                        a=t>>i;
                                                        b=t<<(8-i);
                                                        P1=a|b;
                                                        delay(20000);
                                          }

                               }



              开关SW2按下时,另一流水灯的运作:

                            if(SW2==0)
                            {
                                                        p=0x01;
                                                        q=0x80;
                                                        for(j=0;j<4;j++)
                                                        {

                                                                      P2=p+q;
                                                                      delay(20000);
                                                                      p=p<<1;
                                                                      q=q>>1;                           
                                                        }
                            }
实验过程及实验情况

编写SW1代码时,第二个从右到左的for循环的初始值i设置成0,以致流水灯从左运动到最右端后,又多亮了一个最左端的灯,达不到左右循环流水的效果。后将其i设置成1,实现正常的左右流水循环的效果。制作电路图时,LED方向和代码没有结合好,导致一排LED灯接地,一排接高电平,调整好后两排LED灯都接地。

实验小结
本次实验要求初步掌握延时程序的原理,初步掌握P口的输入检测编程。掌握Keil和Proteus软件的C51设计与仿真操作,熟练掌握并行口P口的编程,熟悉C51编程的变量、存储等概念及使用方法。但是实验过程中仍有不熟练的地方,需要不断改进,且能做出更好的作品。

Proteus7.5版本的仿真与程序下载: 18034520204 何颖(2).zip (175.74 KB, 下载次数: 34)

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表