找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求一STC51单片机按键控制LED灯移位程序谢谢!!!

[复制链接]
跳转到指定楼层
楼主
ID:404202 发表于 2018-10-31 17:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求一STC51单片机按键控制LED灯移位程序谢谢!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2018-10-31 19:27 | 只看该作者
#include <reg51.h>

void delayMS(unsigned int n){
        unsigned char i,j;
        while(n--){
                i = 2;
                j = 199;
                do{
                        while (--j);
                } while (--i);
        }
}

//假设P2连接8颗LED,共地
void main(){
        unsigned char a, i;
       
        while(1){
                //从右往左,逐个亮
                a=1; i=0;
                do{
                        P2=a;
                        a<<=1;
                        delayMS(400);        //延时400ms
                }while(++i<8);
               
                for(i=0; i<2; i++){ //闪2下
                        P2=0xff; //全亮
                        delayMS(700);
                        P2=0x00; //全灭
                        delayMS(700);
                }
               
                //从左往右,逐个亮
                a=0x80; i=0;
                do{
                        P2=a;
                        a>>=1;
                        delayMS(400);        //延时400ms
                }while(++i<8);
               
                for(i=0; i<2; i++){//闪2下
                        P2=0xff; //全亮
                        delayMS(700);
                        P2=0x00; //全灭
                        delayMS(700);
                }
        }
}


回复

使用道具 举报

板凳
ID:412944 发表于 2018-10-31 23:18 | 只看该作者
#include <reg51.h>
#include <intrins.h>
unsigned char scan_key();
void proc_key(unsigned char key_v);
void delayms(unsigned char ms);
sbit        K1 = P0^0;        //??????K1
sbit        K2 = P0^1;        //??????K2
main()
{
        unsigned char key_s,key_v;
        key_v = 0x03;
        P2 = 0xfe;
        while(1)
        {
                key_s = scan_key();
                if(key_s != key_v)
                {
                        delayms(10);
                        key_s = scan_key();
                        if(key_s != key_v)
                        {       
                                key_v = key_s;
                                proc_key(key_v);                                       
                        }
                }
        }       
}
unsigned char scan_key()
{
        unsigned char key_s;
        key_s = 0x00;
        key_s |= K2;
        key_s <<= 1;
        key_s |= K1;
        return key_s;               
}
void proc_key(unsigned char key_v)
{
        if((key_v & 0x01) == 0)
        {
                P2 = _cror_(P2,1);
        }
        else if((key_v & 0x02) == 0)
        {
                P2 = _crol_(P2, 1);
        }
}
void delayms(unsigned char ms)                // ????????
{                                               
        unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}

回复

使用道具 举报

地板
ID:404202 发表于 2018-11-1 12:38 | 只看该作者
devcang 发表于 2018-10-31 19:27
#include

void delayMS(unsigned int n){

谢谢!
回复

使用道具 举报

5#
ID:404202 发表于 2018-11-1 12:39 | 只看该作者
zeq 发表于 2018-10-31 23:18
#include
#include
unsigned char scan_key();

谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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