微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 各位老师帮忙解答一下问题,本人刚上手15单片机

各位老师帮忙解答一下问题,本人刚上手15单片机

时间:10-02 整理:3721RD 点击:
#include <reg51.h>
#define GPIO_DIG P0
#define GPIO_KEY P1
typedef unsigned char u8;
typedef unsigned int u16;
u16 digital[] = {0xf9, 0xa4, 0xb0, 0x99, 0x92,
                                                                 0x82, 0xf8, 0x80, 0x90, 0xc0};            //1, 2, 3, 4, 5, 6, 7, 8, 9, 0
u8 KeyValue;
void Delay(u16 i)
{
        while(i--);
}
void KeyDown()
{
        u8 touch = 0;
        GPIO_KEY = 0xf0;
        if(GPIO_KEY != 0xf0)
        {
                Delay(1000);
                if(GPIO_KEY != 0xf0)
                {
                        GPIO_KEY = 0xf0;                                    
                        switch(GPIO_KEY)                        
                        {
                                case(0xe0): KeyValue = 0; break;                     
                                case(0xd0): KeyValue = 1; break;
                                case(0xb0): KeyValue = 2; break;
                                case(0x70): KeyValue = 3; break;
                        }
                        GPIO_KEY = 0x0f;                                    
                        switch(GPIO_KEY)
                        {
                                case(0x0e): KeyValue = KeyValue; break;              
                                case(0x0d): KeyValue = KeyValue + 4; break;
                                case(0x0b): KeyValue = KeyValue + 8; break;
                                case(0x07): KeyValue = KeyValue + 12; break;
                        }
                        while((touch < 50)&&(GPIO_KEY !=0x0f))
                        {
                                Delay(1000);
                                touch++;
                        }
                }
        }
}
void main()
{
        while(1)
        {
                KeyDown();
                GPIO_DIG = digital[KeyValue];
        }
}

这是我写的一段程序,不知道为什么一下载完程序就显示1(我的数组第一个就是1,如果换成0,下载完程序就变成0)复位之后还是显示1,我想要的效果是在我没按下按键的时候,静态数码管是灭的?该怎么改?三极管是共阳的

你做了按键扫描,但是没有做有没有按键按下的判断,也就是按键扫描完后,就直接显示按键值,应该是按键扫描完后,判断是否有按键按下,如果有就显示按键值,没有则跳过显示部分。

好的,谢谢哈,我再改改

好的,谢谢哈,我再改改

好的,谢谢哈,我再改改

好的,谢谢哈,我再改改

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top