OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2591|回复: 1

LCD显示和开关按键控制似乎很矛盾

[复制链接]
回帖奖励 1 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次(中奖概率 20%)

1

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2020-6-23
在线时间
25 小时
发表于 2020-7-20 22:29:25 | 显示全部楼层 |阅读模式
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"


/************************************************
ALIENTEK精英STM32开发板实验13
TFTLCD显示实验  
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/

int main(void)
{         
        u8 x=0;
         vu8 key = 0;
         float temp;
         u16 adcx=2560;
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                             //LED端口初始化
        LCD_Init();
        POINT_COLOR=RED;
        while(1)
        {               
         key=KEY_Scan(0);
                 switch(key)
                 {
                         case WKUP_PRES:
                         {
//LCD_ShowxNum(50,40,adcx,4,16,0);//显示ADC的值
//                                         while(1)
//                                         {
                                        LED1 = 0;
                                        temp=(float)adcx*(3.3/4096);
                      adcx=temp;
                      LCD_ShowxNum(120,40,adcx,1,16,0);//显示电压值
                      temp-=adcx;
                      temp*=1000;
                      LCD_ShowxNum(100,80,temp,3,16,0X80);       
                                        POINT_COLOR=BLACK;          
                                        LCD_ShowString(30,40,100,16,16,"Isheding=");
                                        LCD_ShowString(30,80,100,16,16,"Ishiji=");
                                        POINT_COLOR=RED;
                                        LCD_ShowString(30,150,200,16,24," Charge mode");     
                                        delay_ms(5000);       
                                        key=KEY_Scan(0);
                                        delay_ms(10);
                                        if(key==KEY1_PRES)
                                                         break;
                                         }
                                         break;
                                                 
//                                        case KEY1_PRES:                 
//                                        while(1){
//                //LCD_ShowxNum(50,40,adcx,4,16,0);//显示ADC的值
//                      temp=(float)adcx*(3.3/4096);
//                      adcx=temp;
//                      LCD_ShowxNum(120,40,adcx,1,16,0);//显示电压值
//                      temp-=adcx;
//                      temp*=1000;
//                      LCD_ShowxNum(100,80,temp,3,16,0X80);
//                                        POINT_COLOR=BLACK;          
//                                        LCD_ShowString(30,40,100,16,16,"Isheding=");
//                                        LCD_ShowString(30,80,100,16,16,"Ishiji=");
//                                        POINT_COLOR=RED;
//                                        LCD_ShowString(30,150,200,16,24,"DisCharge mode");                                                                                                                           
//                                        delay_ms(1000);          
//       }        break;
                                                 
                                         }
                                                                        
                                         LCD_ShowString(30,150,200,16,24,"DisCharge mode");  
                         }
                 }       





我想实现得到功能很简单,就是通过控制按键实现,界面的切换,但是我还没有按下按键单片机就自己显示并且切换了,后来我用最简单的按键去控制LED灯的闪烁,
把LCD_Init()初始化函数,就可以了,我想问题可能是引脚复用的问题,但是我查看了一下LCD的.c文件,发现并没有和开关以及LED灯相冲突的引脚,所以很不能理解,如何利用开关去控制LCD屏显示的内容
正确的按键程序如下:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "adc.h"
#include "timer.h"
u16 chongdian=0;
u16 fangdian=0;
u16 zidongmoshi=0;

/************************************************
ALIENTEK精英STM32开发板实验17
ADC 实验   
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/

int main(void)
{
  vu8        key=0;
        delay_init();                     //延时函数初始化       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
  KEY_Init();                 //初始化与按键连接的硬件接口
        LED_Init();                             //LED端口初始化       
  //LCD_Init();         
        Adc_Init();                                  //ADC初始化
        TIM3_PWM_Init(899,0);
  LED0=0;
        LED1=0;
         while(1)//LED0=0(DS0)表示红灯亮,LED1=0(DS1)表示绿灯亮
         {
         key=KEY_Scan(0);        //得到键值
         //实现模式切换,三种模式的选择
         if(key)
                {                                                  
                        switch(key)
                        {                                 
                                case WKUP_PRES:        //充电模式
                                {chongdian=1;
                     fangdian=0;
                     zidongmoshi=0;
                                        LED0=0;
                                        LED1=1;
                                }
                                        break;
                               
                                case KEY1_PRES:        //放电模式         
                                       
                                {
                                        chongdian=0;
                      fangdian=1;
                      zidongmoshi=0;
                                        LED0=1;
                                        LED1=0;
                                }
                                        break;
                               
                                case KEY0_PRES:        //自动转换模式
                                {
                                        chongdian=0;
                      fangdian=0;
                      zidongmoshi=1;
                                        LED0=1;
                                        LED1=1;
                                }
                                        break;
                        }
                }else delay_ms(10);
        }
}



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2020-6-23
在线时间
25 小时
 楼主| 发表于 2020-7-20 22:30:22 | 显示全部楼层
这个希望大家帮我解答一下,这个确实想不通
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 12:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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