找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3918|回復(fù): 0
收起左側(cè)

CT107D 開(kāi)發(fā)板上實(shí)現(xiàn)流水燈控制

[復(fù)制鏈接]
ID:217409 發(fā)表于 2017-7-5 16:49 | 顯示全部樓層 |閱讀模式
#include "reg52.h"  //定義51單片機(jī)特殊功能寄存器

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;
}

//主函數(shù)
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)
            {
                //進(jìn)入按鍵處理函數(shù)
                key_proc(temp);
                while(P3 != 0xff);  //等待按鍵釋放                        
            }
        }
    }
}

//按鍵掃描函數(shù)
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;
}

//按鍵處理函數(shù)
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;
    }   
}

//延時(shí)函數(shù): 10ms@11.0592MHz
void delay(void)
{
        unsigned char i, j;

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

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表