2291|0

37

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于stm8驱动12864的程序问题 [复制链接]

#include"stm8s.h"
#include"stdio.h"
#define uchar unsigned char
#define u32 unsigned long
#define u8 unsigned long

#define RS     GPIOC,GPIO_PIN_2
#define RW      GPIOC,GPIO_PIN_3
#define E      GPIOE,GPIO_PIN_6
#define RSB      GPIOC,GPIO_PIN_1
#define lcd_D0   GPIO_ReadInputPin(GPIOB, GPIO_PIN_0)
#define lcd_D1   GPIO_ReadInputPin(GPIOB, GPIO_PIN_1)
#define lcd_D2   GPIO_ReadInputPin(GPIOB, GPIO_PIN_2)
#define lcd_D3   GPIO_ReadInputPin(GPIOB, GPIO_PIN_3)
#define lcd_D4   GPIO_ReadInputPin(GPIOB, GPIO_PIN_4)
#define lcd_D5   GPIO_ReadInputPin(GPIOB, GPIO_PIN_5)
#define lcd_D6   GPIO_ReadInputPin(GPIOB, GPIO_PIN_6)
#define lcd_D7   GPIO_ReadInputPin(GPIOB, GPIO_PIN_7)

#define RS_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_2);
#define RS_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_2);

#define RW_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_3);
#define RW_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_3);

#define E_LOW() GPIO_WriteLow(GPIOE, GPIO_PIN_6);
#define E_HIGH() GPIO_WriteHigh(GPIOE, GPIO_PIN_6);

#define PSB_LOW() GPIO_WriteLow(GPIOC, GPIO_PIN_1);
#define PSB_HIGH() GPIO_WriteHigh(GPIOC, GPIO_PIN_1);


void GPIO_configuration()
{
  GPIO_DeInit(GPIOC);
  GPIO_DeInit(GPIOE);
  GPIO_DeInit(GPIOD);
  GPIO_Init(GPIOC, GPIO_PIN_1,GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOE, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST);

}
uchar ReadByte(void)
{
  u8 res=0;
  res=(lcd_D0<<0)|(lcd_D1<<1)|(lcd_D2<<2)|(lcd_D3<<3)|(lcd_D4<<4)|(lcd_D5<<5)|(lcd_D6<<6)|(lcd_D7<<7);
  return res;
}
/**********************
延时
**********************/
void delay_us(u16 z)     //微秒延时
{
  while(z--)
  {
    nop();nop();nop();nop();
  }
}
void delay(u32 i)
{
  TIM2_DeInit();//TIME2初始化
  TIM2_TimeBaseInit(TIM2_PRESCALER_64,25000);//配置TIME2内部时钟基准
  while(i--)
  {
  TIM2_Cmd(ENABLE);//开启TIME2使能,关为DISABLE
  while((TIM2_GetFlagStatus(TIM2_FLAG_UPDATE   ))!=1);//通过查询法是否产生更新时间,判断延时是否结束
  TIM2_ClearFlag(TIM2_FLAG_UPDATE);
  TIM2_Cmd( DISABLE);

}
}
void delay_ms(u16 z)    //毫秒延时
{
  u16 i = 0;
  while(z--)
  {
    for(i = 0;i<1000;i++);
  }
}
void CLK_configuration()
{
  CLK_DeInit();
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);
  CLK_HSICmd(ENABLE);
}
//LCD判忙
uchar LCD_READ(void)
{
  u8 res=0;
  RS_LOW();
  RW_HIGH();
  E_HIGH();
  GPIO_Init(GPIOD, GPIO_PIN_ALL, GPIO_MODE_IN_FL_NO_IT);
// delay_us(5);
   delay(5);
  res=GPIO_ReadInputData(GPIOD);
  E_LOW();
  return res;
}
void com(unsigned char com)//写命令
{
   //while(LCD_BUSY());
   RS_LOW();
   RW_LOW();
   E_LOW();
   //delay_us(5);
     delay(5);
  GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST);

   //GPIO_Write(GPIOD,com);
  GPIOB->ODR=((GPIOB->ODR & 0X00)|com);
   //delay_us(5);
      delay(5);
   E_HIGH();
   // delay_us(5);
    nop();
      delay(5);
}
void dat(unsigned char dat)//写数据
{

   //while(LCD_BUSY());
   RS_HIGH();
   RW_LOW();
   E_LOW();
     delay(5);
  GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(GPIOB, GPIO_PIN_7, GPIO_MODE_OUT_PP_LOW_FAST);

   //GPIO_Write(GPIOD,dat);
  GPIOB->ODR=((GPIOB->ODR & 0X00)|dat);
   //delay_us(5);
      delay(5);
   E_HIGH();
   // delay_us(5);
      delay(5);
    E_LOW();
}
void  LCD12864_Init(void)
{
   PSB_HIGH();
   com(0x34);
   delay_ms(100);
   com(0x30);
   delay_ms(100);
   com(0x0C);
   delay_ms(100);
   com(0x01);
   delay_ms(5);          
}
void display(uchar X,uchar Y,char *string)
{

if(X==0)

{

X = 0x80 ;

}

else if(X==1)

{

X = 0x90 ;

}

else if(X==2)

{

X = 0x88 ;

}

else if(X==3)

{

X = 0x98 ;

}

com(X+Y);

while(*string)

{

dat(*string++); }

}
void main()
{
  GPIO_configuration();
// CLK_configuration();
  LCD12864_Init();
  while(1)
  {
    display(1,1,"你好");
  }
}
这段程序哪有问题?时序问题我不太会,求大神。。。。。。。。

此帖出自stm32/stm8论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表