找回密码
 立即注册

QQ登录

只需一步,快速开始

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

CT107D 开发板上实现流水灯控制

[复制链接]
跳转到指定楼层
楼主
ID:217409 发表于 2017-7-5 16:49 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
#include "reg52.h"  //定义51单片机特殊功能寄存器

unsigned char read_key(void);
void key_proc(unsigned char key);
void delay(void);

//
void cls_buzz()
{
        P2 = (P2&0x1F|0xA0);
        P0 = 0x00;
        P2 &= 0x1F;
}

void cls_led()
{
        P2 = (P2&0x1F|0x80);
        P0 = 0xFF;
        P2 &= 0x1F;
}

//主函数
void main(void)
{
    unsigned char temp;

        cls_buzz();
        cls_led();

    while(1)
    {
        temp = read_key();
        if(temp != 0xff)
        {
            delay();  //按键消抖
            temp = read_key();
            if(temp != 0xff)
            {
                //进入按键处理函数
                key_proc(temp);
                while(P3 != 0xff);  //等待按键释放                        
            }
        }
    }
}

//按键扫描函数
unsigned char read_key(void)
{
    unsigned char temp;
    unsigned char key_value = 0xff;

    temp = P3&0x0f;
    switch(temp)
    {
        case 0x0e:
            key_value = 1;  //S7
            break;   
        case 0x0d:
            key_value = 2;  //S6
            break;   
        case 0x0b:
            key_value = 3;  //S5
            break;   
        case 0x07:
            key_value = 4;  //S4
            break;   
    }
    return key_value;
}

//按键处理函数
void key_proc(unsigned char key)
{
    switch(key)
    {
        case 1:
                        P2 = (P2&0x1f|0x80);
                        P0++;
                        P2 &= 0x1f;
            break;
        case 2:
                        P2 = (P2&0x1f|0x80);
                        P0--;
                        P2 &= 0x1f;
        case 3:
                        P2 = (P2&0x1f|0x80);
                        P0 += 2;
                        P2 &= 0x1f;
            break;
        case 4:
                        P2 = (P2&0x1f|0x80);
                        P0 -= 2;
                        P2 &= 0x1f;
            break;
    }   
}

//延时函数: 10ms@11.0592MHz
void delay(void)
{
        unsigned char i, j;

        i = 108;
        j = 145;
        do
        {
                while (--j);
        } while (--i);
}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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