2611|1

1

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

STM32F407點亮LCM顯示字符無顯示 [复制链接]

5芯积分
本帖最后由 街角的守候 于 2017-1-19 09:47 编辑

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"



#define RS PBout(9)
#define RW PBout(13)
#define E PBout(14)
#define BF PBin(10)
#define D3 PBout(10)
#define D2 PBout(7)
#define D1 PBout(6)
#define D0 PBout(12)



void check_BF(void)   //檢測LCM繁忙標誌
{
         E=0;
         do
         {
           BF=1;
           RS=0;RW=1;E=1;
         }while(BF==1);
}
//---------------------------------------------------------------------------------



void LCM_WCMD(u8 x)             //對LCM寫命令
{                u8 a;
                u8 AA[4];
          check_BF();


            for (a=0;a<4;a++)
            {
            AA[a]=x&0x80;
                  x=x<<1;
             }
           D3=AA[0];  
           D2=AA[1];
           D1=AA[2];
           D0=AA[3];
         RS=0;RW=0;E=1;
           check_BF();

}




//----------------------------------------------------------------------------------





void LCM_WCHAR(u8 chardata)        //讓LCM顯示字符
{
                u8 i;
          u8 AA[4];
        check_BF();


            for (i=0;i<4;i++)
        {
            AA=chardata&0x80;
          chardata=chardata<<1;
        }
          D3=AA[0];           
           D2=AA[1];
           D1=AA[2];
           D0=AA[3];
          RS=1;RW=0;E=1;
        check_BF();
}
//-------------------------------------------------------------------



void LCM_Init(void)
{
        
        
    GPIO_InitTypeDef  GPIO_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//時能GPIOB時鐘


        //GPIO初始化
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_10|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_9 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //輸出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
        

//-------------LCM初始化----------------------
        LCM_WCMD(0x20);//功能設定,使用4bit ,一列顯示
        delay_ms(1);
        LCM_WCMD(0x80);
        delay_ms(1);
        
        
        LCM_WCMD(0x20);//功能設定,使用4bit ,一列顯示
        delay_ms(1);
        LCM_WCMD(0x80);
        delay_ms(1);
        
        
        LCM_WCMD(0x20);//功能設定,使用4bit ,一列顯示
        delay_ms(1);
        LCM_WCMD(0x80);
        delay_ms(1);
        
        
        LCM_WCMD(0x20);//功能設定,使用4bit ,一列顯示
        delay_ms(1);
        LCM_WCMD(0x80);
        delay_ms(1);
        
               
        LCM_WCMD(0x00);//關閉顯示功能
        delay_ms(1);
        LCM_WCMD(0x80);//關閉顯示功能
        delay_ms(1);
        
        LCM_WCMD(0x00);//清楚顯示幕
        delay_ms(1);
        LCM_WCMD(0x10);//清楚顯示幕
        delay_ms(10);
        
        
        
        LCM_WCMD(0x00);//設定輸入模式,位址遞增,關顯示幕
        delay_ms(1);
        LCM_WCMD(0x60);//設定輸入模式,位址遞增,關顯示幕
        delay_ms(1);
        
        LCM_WCMD(0x00);//顯示功能-開顯示幕-無遊標-遊標不閃
        delay_ms(1);
        LCM_WCMD(0xc0);
        delay_ms(1);
}
int main(void)
{
        u8 m;
        u8 BB[4]={0x50,0x4C,0x53,0x77};//0X50為P,0x4C為L,0X53為S,0X77為w

        delay_init(168);     //延時初始化
        uart_init(115200);        //串口初始化
        LED_Init();                //LED燈的初始化
         LCM_Init();           //LCM的初始化
         LED0=1;              //LED0暫時不亮


                        LCM_WCMD(0X80);// LCM的第一列地址
                        delay_ms(1);
                        LCM_WCMD(0X00);
                for(m=0;m<4;m++)
                {
                                LCM_WCHAR(BB[m]);   //取高四位的值發送至LCM
                                delay_ms(1);
                               LCM_WCHAR(BB[m]<<4);  //取低四位的值發送至LCM
                                delay_ms(1);
           }
                delay_ms(100);
                LED0=!LED0; //LED0翻轉,點亮


}

有兩點比較疑惑:1. #define BF PBin(10),#define D3 PBout(10)這兩個為同一PIN,當LCM_WCMD(0X80)的時候,D3則為                                      1,此時BF去檢測,BF不就一直處於繁忙檢測嗎?
                            2. 例如PBout(10)=0X40,是不是PBout(10)就是輸出為1,理論上非0則為1?但從JTAG調試看,對應                                    的PIN并沒有為1。以上代碼不知道是不是由於這兩個疑惑問題導致?幫忙check下,LCM是一直沒有顯示對應的字符,通過調試,發現寫命令,寫字符的函數有問題。但是不知道哪裡問題

----------------LCM的data sheet如下-----------------------------------------------------
https://download.eeworld.com.cn/detail/%E8%A1%97%E8%A7%92%E7%9A%84%E5%AE%88%E5%80%99/563484




此帖出自stm32/stm8论坛

最新回复

楼主来自台湾吗 LCM没用过,帮顶  详情 回复 发表于 2017-1-19 22:29
点赞 关注
 

回复
举报

39

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
楼主来自台湾吗
LCM没用过,帮顶
此帖出自stm32/stm8论坛
 
个人签名欢迎访问 https://www.brobwind.com
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表