[STM8]

STM8S207驱动OCMJ2x8C (12836)液晶,没反应

[复制链接]
913|6
手机看帖
扫描二维码
随时随地手机跟帖
LSLDAY|  楼主 | 2017-4-28 11:04 | 显示全部楼层 |阅读模式
求朋友们帮忙看看程序和硬件电路,调了4天了还是不行,各种资料查了  技术支持也说不出来原因 ,先放电路图
液晶电路1.png
液晶电路2.png
LSLDAY|  楼主 | 2017-4-28 17:49 | 显示全部楼层
现在发现一个情况 在 仿真条件下能显示,但是在正常运行时不能显示

使用特权

评论回复
LSLDAY|  楼主 | 2017-4-28 17:50 | 显示全部楼层
#include "STM8S.h"
#include "LCD_Driver.h"
#include "delay.h"

/**************************************************
//--------*函数介绍* : disp_StrArry()          显示数组
//--------*输入参数* : addr:液晶地址        len:数组长度
                        Arry: 数组名称
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2014.05.13
**************************************************/
void  disp_StrArry(uchar addr,uchar len ,uchar *Arry)
{
    uchar i=0;
    Lcd_Write_Data(CMD,Lcd_Basic_Format);        //文本写入方式
    Lcd_Write_Data(CMD,addr);        //坐标
    for(i=0; i<len; i++)
                        Lcd_Write_Data(DATA,Arry[i]);
}

/**************************************************
//--------*函数介绍* : Lcd_busy()
//--------*输入参数* : 无
//--------*输出参数* : 无
//--------*返 回 值* : busy
//--------*完成日期* : 2017.04.27
**************************************************/
BitStatus Lcd_busy(void)
{
                BitStatus lcdbusy=RESET;       //读LCD BF
                BitStatus bit_status;
                //u8 a;
                GPIO_WriteLow(Lcd_Port,Lcd_Rs);
                GPIO_WriteHigh(Lcd_Port,Lcd_Rw);
                GPIO_WriteHigh(Lcd_Port,Lcd_En);
               
                GPIO_Init(GPIOH, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT);
                delay_us(2);
                /*a=GPIO_ReadInputData(Lcd_Data);
                 if((a&0x80)==1)        busy=SET;*/
                bit_status = GPIO_ReadInputPin(GPIOH, GPIO_PIN_4);//读DB7
                if(bit_status == SET)  //SET or RESET
                        {lcdbusy=SET;}
                GPIO_Init(GPIOH, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
                GPIO_WriteLow(Lcd_Port,Lcd_En);
                delay_us(5);
                return(lcdbusy);  
}

/**************************************************
//--------*函数介绍* : wr_lcd()          LCD 写函数
//--------*输入参数* : dat_comm  H:Data  L:Command
                        content    :数据
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2017.04.21
**************************************************/
void LCD_Data_Trim(u8 content)
{
                u8 i;
                u8 a[8]={0};
                a[0]= content&0x01;
                for(i=7;i>0;i--)
                {
                        a[i]=(content>>i)&0x01;
                }
                DB0=a[0];
                DB1=a[1];
                DB2=a[2];
                DB3=a[3];
                DB4=a[4];
                DB5=a[5];
                DB6=a[6];
                DB7=a[7];
}
void Lcd_Write_Data(Data_Flag Flag,u8 data)
{
                while(Lcd_busy()==SET);     
          delay_us(500); //----如果出现数据不对的情况,有可能是延时短.例如 显示不对或者不显示
                if(Flag==CMD)        //是命令还是数据
                GPIO_WriteLow(Lcd_Port,Lcd_Rs);  
                else
                {
                        GPIO_WriteHigh(Lcd_Port,Lcd_Rs);
                }  
                GPIO_WriteLow(Lcd_Port,Lcd_Rw);  
                GPIO_WriteLow(Lcd_Port,Lcd_En);   
                //GPIO_Write(Lcd_Data,data);   //输出数据
                LCD_Data_Trim(data);//--------输出数据
                GPIO_WriteHigh(Lcd_Port,Lcd_En);  //使能信号产生  
                delay_us(5);
                GPIO_WriteLow(Lcd_Port,Lcd_En);
}


/**************************************************
//--------*函数介绍* : init_lcd()          液晶初始化
//--------*输入参数* :        Format
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2017.04.27
**************************************************/
void Lcd_Configuration(u8 Format)
{
                /************选择并口方式*******************/
                 GPIO_WriteHigh(Lcd_Port_1, Lcd_Psb);   
                /**************复位LCD***************/
                GPIO_WriteLow(Lcd_Port_1, Lcd_Rst);   
                 delay_us(300);  
                GPIO_WriteHigh(Lcd_Port_1, Lcd_Rst);   
                 delay_us(300);
                Lcd_Write_Data(CMD,Lcd_Mannerism_Format);  
                delay_us(500);
                Lcd_Write_Data(CMD,Format); //基本指令操作
                delay_us(500);
                Lcd_Write_Data(CMD,Lcd_Close_Cursor);//显示开
                delay_us(500);
                //Lcd_Write_Data(CMD,Lcd_Clear);//清除LCD的显示内容
                delay_us(1800);
}
/**************************************************
//--------*函数介绍* : clrram()          清DDRAM
//--------*输入参数* : 无
//--------*输出参数* : 无
//--------*返 回 值* : 无
//--------*完成日期* : 2017.04.28
**************************************************/
void clrram (void)
{
    Lcd_Write_Data(CMD,Lcd_Basic_Format); //基本指令操作
    Lcd_Write_Data(CMD,Lcd_Clear);//清除LCD的显示内容
}

使用特权

评论回复
LSLDAY|  楼主 | 2017-4-28 17:50 | 显示全部楼层
没人吗

使用特权

评论回复
mmuuss586| | 2017-4-28 20:18 | 显示全部楼层
仿真可以,程序运行不行;

是不是程序没下进去;
其它功能工作正常了吗?

或者降低读写液晶的速度看看

使用特权

评论回复
LSLDAY|  楼主 | 2017-4-29 17:38 | 显示全部楼层
mmuuss586 发表于 2017-4-28 20:18
仿真可以,程序运行不行;

是不是程序没下进去;

谢谢回复 ,其他程序正常,例如步进电机运行正常,但就是液晶没有显示,用ST-link连接仿真的时候就显示,另外问下  ST-link连接仿真的时候 STM8的时钟是内部时钟还是外部时钟(在初始化的时候做了切换到外部时钟的处理,调用的库函数写的)

使用特权

评论回复
LSLDAY|  楼主 | 2017-7-1 09:58 | 显示全部楼层
工作电压搞错了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

288

帖子

5

粉丝