LCD12864 为什么就是显示不了内容!
来源:互联网 发布:苹果mac怎么关闭程序 编辑:程序博客网 时间:2024/06/05 14:26
#ifndef __12864_H
#define __12864_H
#include "stm32f10x.h"
#define RS GPIO_Pin_12// Êý¾Ý/ÃüÁîÑ¡Ôñ¶Ë
#define RS_H GPIO_SetBits(GPIOA,GPIO_Pin_12)
#define RS_L GPIO_ResetBits(GPIOA,GPIO_Pin_12)
#define RW GPIO_Pin_11// ¶Á/дѡÔñ¶Ë
#define RW_H GPIO_SetBits(GPIOA,GPIO_Pin_11)
#define RW_L GPIO_ResetBits(GPIOA,GPIO_Pin_11)
#define E GPIO_Pin_10// ʹÄÜÐźÅ
#define E_H GPIO_SetBits(GPIOA,GPIO_Pin_10)
#define E_L GPIO_ResetBits(GPIOA,GPIO_Pin_10)
#define PSB GPIO_Pin_6
#define PSB_H GPIO_SetBits(GPIOC,GPIO_Pin_6) // ²¢/´®ÐÐÑ¡Ôñ¶Ë
#define PSB_L GPIO_ResetBits(GPIOC,GPIO_Pin_6)
#define RST GPIO_Pin_10// ¸´Î»
#define RST_H GPIO_SetBits(GPIOA,GPIO_Pin_10)
#define RST_L GPIO_ResetBits(GPIOA,GPIO_Pin_10)
#define Light GPIO_Pin_9 //±³¹â¿ª¹Ø
#define Light_H GPIO_SetBits(GPIOC,GPIO_Pin_9)
#define Light_L GPIO_ResetBits(GPIOC,GPIO_Pin_9)
#define ReadDATA GPIOD
#define DATA GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
void LCD_Write_Data(u16 data);
void LCD_Init(void);
void LCD_Position(u8 x,u8 y);
u8 LCD12864_Busy(void);
void LCD12864_DrowPic(u8 *a);
void LCD_Write_Cmd(u8 cmd); //дÃüÁî
#endif /* __12864_H */
#include "12864.h"
#include"User.h"
u8 LCD12864_Busy(void)
{
/*
u16 i = 0;
u16 ReadValue;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//¸ü¸ÄλÖÃ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);//¸ü¸ÄλÖÃ
RS_L;
RW_H;
E_H;
delay_ms(1);
ReadValue=GPIO_ReadInputData(GPIOD);
while((ReadValue& 0x0080) == 0x80)
{
i++;
if(i > 20000)
{
E_L;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//¸ü¸ÄλÖÃ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);//¸ü¸ÄλÖÃ
return 0;
}
}
E_L;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//¸ü¸ÄλÖÃ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);//¸ü¸ÄλÖÃ
*/
delay_ms(20);
return 1;
}
void delay(u16 x ) //ÑÓʱ
{
delay_ms(x);
}
void LCD_Write_Cmd(u8 cmd) //дÃüÁî
{
u16 i;
i = 0;
while( LCD12864_Busy() == 0)
{
delay_ms(1);
i++;
if( i>1000)
{
return;
}
}
RS_L;
RW_L;
E_L;
GPIOD->ODR = (GPIOD->ODR & 0xFF00) | cmd;
E_H;
delay(5);
E_L;
}
void LCD_Write_Data(u16 data) //дÊý¾Ý
{
u16 i;
i = 0;
while( LCD12864_Busy() == 0)
{
delay_ms(1);
i++;
if( i>1000)
{
return;
}
}
RS_H;
RW_L;
E_L;
GPIOD->ODR = (GPIOD->ODR & 0xFF00) | data;
E_H;
delay(5);
E_L;
}
void LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//¶¨ÒåÒ»¸öGPIO_InitTypeDefÀàÐ͵ĽṹÌå
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //¿ªÆôGPIOCµÄÍâÉèʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); //¿ªÆôGPIODµÄÍâÉèʱÖÓ
GPIO_InitStructure.GPIO_Pin = RS | RW | E;//Ñ¡ÔñÒª¿ØÖƵÄGPIOCÒý½Å
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//ÉèÖÃÒý½ÅģʽΪÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ÉèÖÃÒý½ÅËÙÂÊΪ50MHZ
GPIO_Init(GPIOC,&GPIO_InitStructure); //µ÷Óÿ⺯Êý£¬³õʼ»¯GPIOE
GPIO_InitStructure.GPIO_Pin = DATA;//Ñ¡ÔñÒª¿ØÖƵÄGPIODÒý½Å
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//ÉèÖÃÒý½ÅģʽΪÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ÉèÖÃÒý½ÅËÙÂÊΪ50MHZ
GPIO_Init(GPIOD,&GPIO_InitStructure); //µ÷Óÿ⺯Êý£¬³õʼ»¯GPIOD
delay(5);
PSB_H; //²¢Ðз½Ê½
RST_H;
LCD_Write_Cmd(0x30);delay(20);//»ù±¾Ö¸Á
LCD_Write_Cmd(0x0c);delay(20);//ÕûÌåÏÔʾ´ò¿ª,¹Ø¹â±ê
LCD_Write_Cmd(0x01);delay(20);//Çå³ýLCDµÄÏÔʾÄÚÈÝ
LCD_Write_Cmd(0x02);delay(20);// µØÖ·¹éλ
LCD_Write_Cmd(0x06);delay(20);//ÓαêÓÒÒÆ
LCD_Write_Cmd(0x80);delay(20);//É趨ÏÔʾµÄÆðʼµØÖ·
LCD_Write_Cmd(0x36);//´ò¿ª»æͼÏÔʾ
LCD_Write_Cmd(0x30);//´ò¿ª»ù±¾Ö¸Á
}
void LCD12864_ClearScreen(void)//»æͼ·½Ê½Ê±ÇåÆÁ
{
u8 i,j;
LCD_Write_Cmd(0x34); //¿ªÍØÕ¹Ö¸Á
for(i=0;i<32;i++) //??LCD????32????????
{
LCD_Write_Cmd(0x80+i); //??????Y??
LCD_Write_Cmd(0x80); //??????X??
for(j=0;j<32;j++) //????16?,????????????,?
{ //???32?????????????????
LCD_Write_Data(0xFF); //??1,?????????????
}
}
LCD_Write_Cmd(0x36); //0x36????????????
LCD_Write_Cmd(0x30); //???????
}
void LCD12864_DrowPic(u8 *a) //»æͼÃüÁî
{
u8 i,j;
LCD12864_ClearScreen();
LCD_Write_Cmd(0x34); //???????,????????
for(i=0;i<32;i++) //??LCD????32????????
{
LCD_Write_Cmd(0x80+i); //??????Y??
LCD_Write_Cmd(0x80); //??????X??
for(j=0; j<16; j++) //????16?,????????????,?
{ //???32?????????????????
LCD_Write_Data(*a); //??1,?????????????
a++;
}
}
for(i=0; i<32; i++) //??LCD????32????????
{
LCD_Write_Cmd(0x80+i); //??????Y??
LCD_Write_Cmd(0x88); //??????X??
for(j=0; j<16; j++) //????16?,????????????,?
{ //???32?????????????????
LCD_Write_Data(*a); //??1,?????????????
a++; }
}
LCD_Write_Cmd(0x36); //???
LCD_Write_Cmd(0x30); //???????
}
void LCD_Position(u8 x,u8 y) //¶¨Î»ÔÚµÚ¼¸ÐеÚy¸öλÖÃÏÔʾ
{
u8 position;
if(x==0)
{ x=0x80; //µÚÒ»ÐÐ
}
else if(x==1)
{x=0x90; //µÚ¶þÐÐ
}
else if(x==2)
{x=0x88; //µÚÈýÐÐ
}
else if(x==3)
{x=0x98; //µÚËÄÐÐ
}
position = x + y;
LCD_Write_Cmd(position);
}
- LCD12864 为什么就是显示不了内容!
- LCD12864显示
- 为什么手机垃圾就是治不了?
- 第五节 LCD12864显示
- LCD12864串行和并行显示
- 本地连接一切正常 为什么就是上不了网呢
- LCD12864
- LCD12864
- 为什么我用tabhost,显示不了图标
- LCD12864 文本显示示例(控制芯片ST7920)
- 基于FPGA的LCD12864显示字符
- 基于FPGA的LCD12864图像显示
- LCD12864实现3D图形显示
- 单片机学习——LCD12864串口显示
- 为什么我复制到system/app下了,就是用不了呢!因为什么呢?
- 道理我都懂,但为什么就是改不了坏习惯?
- firefox显示不了QQ空间日志内容的临时解决方法
- error:val()显示不了某个属性的内容
- 【NOIP2014八校联考第2场第2试9.28】分组(group)
- UOJ 79 带花树入门
- 使用策略模式进行简单的form验证
- uoj 279: [UTR #2]题目交流通道 动态规划
- nginx过滤器模块
- LCD12864 为什么就是显示不了内容!
- 步步扎进Java-面向对象
- bzoj 2820: YY的GCD 莫比乌斯反演
- 图解Linux命令之--comm命令
- liferay ga6获取当前语言环境
- 使用selenium+phantomjs
- 简书30日排行爬虫代码
- 2017重新起航
- Activity的生命周期和启动模式