STM8 4线驱动1602乱码

发布者:cloudsousou6最新更新时间:2020-02-20 来源: eefocus关键字:STM8  4线驱动  1602乱码 手机看文章 扫描二维码
随时随地手机看文章

近段时间用STM8驱动1602,采用4线方式,首次上电出现乱码,现在网上找到解决方法,做此总结。


网上大佬分析,出现乱码原因是在单片机发送0x28初始化时,高4位发送就已经完成初始化,低4位发送导致出现乱码,需要延时后再初始化可解决。这位大佬提供的方法确实可以解决问题,但感觉问题应该不在这,具体原因还没得出。


#include

#define u8  uint8_t

#define u16 uint16_t

#define u32 uint32_t

typedef unsigned char    uint8_t;

typedef unsigned short   uint16_t;

typedef unsigned long    uint32_t;

#define  LCDRS          PB_ODR_ODR0     

#define  LCDRW          PB_ODR_ODR1    

#define  LCDEN          PB_ODR_ODR2     

#define  LCDDATA        PC_ODR          

u8 table1[]="====LCD 1602===="; //第一行显示数据

u8 table2[]="****************"; //第二行显示数据

void delay(u16 Count);

void LCD1602_Write(u8 cmdordata,u8 writetype);

void LCD1602_init(void);

void LCD1602_DIS(void);

int main(void)

{

  PB_DDR_DDR0=1;       

  PB_CR1_C10=1;         

  PB_CR2_C20=0;         

  PB_DDR_DDR1=1;        

  PB_CR1_C11=1;        

  PB_CR2_C21=0;         

  LCDRW=0;              

  PB_DDR_DDR2=1;        

  PB_CR1_C12=1;         

  PB_CR2_C22=0;         

  PC_DDR=0xFF;          

  PC_CR1=0xFF;          

  PC_CR2=0x00;          

  LCDDATA=0xFF;          

  LCD1602_init();       

  LCD1602_DIS();        

  while(1);

}

void delay(u16 Count)

{

  u8 i,j;

  while (Count--)

  {

    for(i=0;i<50;i++)

      for(j=0;j<20;j++);

  }

}

void LCD1602_init(void)

{

  LCD1602_Write(0x28,0);

/*区间内为加入延时,初始化部分*/

  LCDEN=1;delay(5);

  LCDEN=0;delay(5);

  LCD1602_Write(0x28,0);

/*区间内为加入延时,初始化部分*/

  LCD1602_Write(0x0C,0);

  LCD1602_Write(0x06,0);

  LCD1602_Write(0x01,0);

}

void LCD1602_DIS(void)

{

  u8 i;

  LCD1602_Write(0x80,0);

  for(i=0;i<16;i++)

  {

      LCD1602_Write(table1[i],1);

      delay(2);

  }

  LCD1602_Write(0xC0,0);

  for(i=0;i<16;i++)

  {

      LCD1602_Write(table2[i],1);

      delay(2);

  }

}

void LCD1602_Write(u8 cmdordata,u8 writetype)

{

    LCDRS=writetype;

    delay(5);

    LCDDATA &= 0x0F;   

    LCDDATA|=cmdordata & 0xF0; 

    LCDEN=1;delay(5);

    LCDEN=0;delay(5);

    cmdordata=cmdordata << 4;   

    LCDDATA &= 0x0F;   

    LCDDATA |= cmdordata & 0xF0;  

    LCDEN=1;delay(5);

    LCDEN=0;delay(5);

}


关键字:STM8  4线驱动  1602乱码 引用地址:STM8 4线驱动1602乱码

上一篇:STM8 LCD液晶
下一篇:STM8S105K6T6单片机的IIC配置问题

推荐阅读最新更新时间:2024-11-18 07:15

IAR编译stm8出现的奇葩问题
近日使用iar for stm8的软件来调试stm8系列的芯片,使用timer定时器中断时发现一个问题,程序中timer定时器的中断入口如下 #pragma vector=ITC_IRQ_TIM1_OVF + 2 __interrupt void TIM1_UPD_OVF_BRK_IRQHandler(void) { /* 清除更新中断标记,这步不能漏掉,否则会连续进入中断程序 */ TIM1_ClearFlag(TIM1_FLAG_UPDATE); //add your code here } 我在 #pragma vector=ITC_IRQ_TIM1_OVF + 2 和 __interrupt
[单片机]
基于stm8的IIC协议---DS3231时钟模块读取
一、综述 上一篇协议已经详细解说了iic协议的各个函数,通过上一篇协议,相信大家已经对iic有了一定的认识。这一篇博客,我是利用了IIC协议来实现DS3231传感。刚学习的朋友可以买一块来试手,上手较为简单。 二、具体任务实现步骤 1.硬件上: 接线较为简单,保证传感接地与接上电源,由数据手册可以知道,电源要接3.3v,过大电流会烧坏传感。SDA 与 SCL两个引脚分别接自己定义的 2.软件上: (1)官方手册 这里给出的数据手册是英文版的,可以自行提取,需要中文版的可以自己去淘宝搜索一下,看一些相关的介绍和去百度找中文资料手册。 链接:https://pan.baidu.com/s/1Oo6o68SoVr
[单片机]
基于<font color='red'>stm8</font>的IIC协议---DS3231时钟模块读取
STM8 CRC计算
STM8 CRC计算 CRC校验仅用于保证通信的可靠性。数据发送和数据接收分别使用单独的CRC计算器。通过对每一个接收位进行可编程的多项式运算来计算CRC。CRC的计算是在由SPI_CR1寄存器中CPHA和CPOL位定义的采样时钟边沿进行的。 CRC计算是通过设置SPI_CR1寄存器中的CRCEN位启用的。设置CRCEN位时同时复位CRC寄存器(SPI_RXCRCR和SPI_TXCRCR)。当设置了SPI_CR2的CRCNEXT位,SPI_TXCRCR的内容将在当前字节发送之后发出。 如果Tx缓冲区中已经有一个字节,该字节发送完成后再发送CRC值。在发送CRC值的过程中,CRC计算器被关闭,CRC寄存器的值保持不变。 如果在发送
[单片机]
STM8单片机学习总结04
所做的“功率LED板”,通过使用STM8完成手机、电脑通过蓝牙控制功率器件的有效动作,自己编写“代码”已经完全调通,其中也遇到不少问题,列举如下: --------------------------制作方面----------------------- 01)、首先就是MCU的选择; 考虑的主要要素为:价格低、资源够,后来又添加了“封装小”;实际中,但以“功能实现”而言,“51单片机”、“stm32”、“MSP430”、“AVR”全部可以满足需求,但综合考虑后,可能得仔细斟酌,新闻上面报道过现在已经有“小封装”、“功能足”的“51单片机”,价格在“1.0RMB”左右,但未具体查询过,后续有需求时,再更新; 02)、然后,“原
[单片机]
STM8 中断映射
下面表格列出了中断映射: (表16:STM8中断映射)
[单片机]
<font color='red'>STM8</font> 中断映射
stm8 Error[Li005]: no definition for XXX 的解决办法
之前gpio.c文件有问题,重新在根文件夹/inc /src中添加了一个新的gpio.c,然后我在 stm8_board.c文件中编写串口函数,编译时报错 Error : no definition for”GPIO_Init“ 意思是:我没有定义这个GPIO_Init()函数?不可能啊??????????????????? 我检查了头文件,gpio.c中定义了,gpio.h中也声明了为啥说我没定义不让我调用???????????? 经检查发现:我添加c文件时没有Make 发现.c文件里有个#endif 然后把那行删去 (.C文件有问题) 编译成功
[单片机]
<font color='red'>stm8</font> Error[Li005]: no definition for XXX 的解决办法
STM8S103 1 segment .bss size overflow (67)错误处理
可以在STVD 的IDE里改 project - setting - linker -category(input) 把Ram的空间改大一些
[单片机]
STM8S103 1 segment .bss size overflow (67)错误处理
STM8-按键切换灯的亮灭
目的:熟悉按位读入语句GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);的使用 #include stm8s.h #define ulong unsigned long void delay(ulong i) { while(i--); }//延时函数 void main(void)////////////主函数 { unsigned char flag=0; GPIO_DeInit(GPIOD); GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_De
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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