找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求解程序一边控制LED一边控制按键

[复制链接]
跳转到指定楼层
楼主
ID:211467 发表于 2017-6-18 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我从厂里面拿来了一个学习板(作为初学者,我用的是AT89C52单片机),这个学习板数码管位选是P0口,低电平有效,
段选是P2口,也是低电平有效。数码管对应的按键是一边是P2^2~P2^7,公共端接的是P3^3。怎么才能一边控制按键一边让数码管亮(程序不会写)。这是我的写的按键控制小灯的程序,可是控制数码管就不会了。
//LED小灯区别按键
//LED小灯区别按键
#include<reg52.h>                        
#define uint unsigned int       
#define uchar unsigned char
uchar temp;
sbit key=P3^3;             //按键公共端
void delay(uchar z)       //延时函数
{
uint x,y;
for(x=70;x>0;x--)
   for(y=z;y>0;y--);
}       
void main()
{
while(1)
  {
    key=0;              //按键公共端置0
    temp=P2;          //用按键扫描方法判断是否有按键按下
    temp=temp&0xff;
    while(temp!=0xff)
      {
       delay(5);            //延时一段时间确认按键是否按下
        temp=P2;
        temp=temp&0xff;
        while(temp!=0xff)
        {
                temp=P2;
                switch(temp)          //对应按下的不同按键,点亮不同的LED小灯
                {
                        case 0x7f:P1=0x7f;break;
                        case 0xbf:P1=0xbf;break;
                        case 0xdf:P1=0xdf;break;
                        case 0xef:P1=0xef;break;
                        case 0xf7:P1=0xf7;break;
                        case 0xfb:P1=0xfb;break;
                }
                while(temp!=0xff)          //消除按键松开时的抖动
                {
                temp=P2;
                }
        }
     }
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:211467 发表于 2017-6-18 17:28 | 只看该作者
P0段选,P2位选,说错了
回复

使用道具 举报

板凳
ID:179958 发表于 2017-6-18 17:53 | 只看该作者
数码管驱动分为位选和段选,如果是多位数码管,得进行动态扫描,建议先了解一下数码管的驱动原理,然后先让一位显示,再升级成多位的
回复

使用道具 举报

地板
ID:211467 发表于 2017-6-18 19:31 | 只看该作者
小潘哥 发表于 2017-6-18 17:53
数码管驱动分为位选和段选,如果是多位数码管,得进行动态扫描,建议先了解一下数码管的驱动原理,然后先让 ...

数码管动态显示我也尝试着做好了,可是不知道怎么把数码管动态显示和这个程序和在一起。
void display()                                           //数码管从0到255动态显示
{                       
        P2=0x7f;
        P0=number[num/100];
        delay(10);
        P2=0xbf;
        P0=number[num%100/10];
        delay(10);
        P2=0xdf;
        P0=number[num%10];
        delay(10);
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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