微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 哪位高手帮我看看这段程序哪里有问题

哪位高手帮我看看这段程序哪里有问题

时间:10-02 整理:3721RD 点击:
这是一个LCD12864的驱动程序!使用串行方式的
#include "stm32f10x.h"
#define uchar unsigned char
#define RS_0()  GPIO_WriteBit(GPIOD,GPIO_Pin_10 ,Bit_RESET   );
#define RS_1()  GPIO_WriteBit(GPIOD,GPIO_Pin_10 ,Bit_SET     );
#define RW_0()  GPIO_WriteBit(GPIOD,GPIO_Pin_11 ,Bit_RESET   );
#define RW_1()  GPIO_WriteBit(GPIOD,GPIO_Pin_11 ,Bit_SET     );
#define E_0()   GPIO_WriteBit(GPIOD,GPIO_Pin_12 ,Bit_RESET  );
#define E_1()   GPIO_WriteBit(GPIOD,GPIO_Pin_12 ,Bit_SET    );
uchar i,j;
u16 AC_TABLE[]={0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,        
      0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,        
      0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,        
      0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,     
      };

void PA_input(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6|GPIO_Pin_7;     //LED0-->PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void PA_output(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6|GPIO_Pin_7;     //LED0-->PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;         
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/****   清屏   *****/
void claer_all(void)
{
RS_0();
RW_0();
  write_comd(0x0001);
delay_ms(5);
}
/*******初始化*******/
void LCDInit(void)
{
write_comd(0x0030);  //功能设定,基本指令
write_comd(0x000e);  // 显示开,游标关,反白关
write_comd(0x0001);  // 清除显示
}
/*********读忙********/
void read_busy(void)
{
char busy;
write_data(0x00ff);
RS_0();
RW_1();
do{
  E_1();
  busy=read_data();
  E_0();
               
}while(busy>0x7f);
}
/*********写命令********/
int write_comd(u16 cmd)
{
  RS_0();
  RW_0();
     GPIO_Write(GPIOA,cmd);
  E_1();
  E_0();
}
  /*********写数据********/
int write_data(u16 dat)
{
  RS_1();
  RW_0();
     GPIO_Write(GPIOA,dat);
  E_1();
  E_0();
}
  /*********写数据********/
int read_data()
{
  u8 a;
  PA_input();
  delay_ms(20);
  a=(u8)GPIO_ReadInputData(GPIOA);
  PA_output();           
  return(a);
}
/*******汉字和字符显示,参数入口:Show(地址,显示宽度,汉字数组)************/
/*void Show(u16 address,u8 L,u16 STR1[])
{
   char i;
   RS_0();
   RW_0();   
   write_comd(address);
   for(i=0;i<L;i++)
   {
     read_busy();
  write_data(STR1);
   }
}
  */
void  main()
{
    u8 L=32;
u16 add=0x0080;
  SystemInit();     //系统时钟初始化为72M   SYSCLK_FREQ_72MHz
delay_init(72);       //延时函数初始化   
NVIC_Configuration();   //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  LED_Init();
   LCDInit();
delay_ms(5);
  claer_all() ;
delay_ms(5);
//Show(add,L,AC_TABLE[]);  
   
   for(i=0;i<32;i++)
   {
     write_comd(add);
  add++;
     read_busy();
  write_data(0x00ff);
      }
  }

32看不懂。。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top