OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3771|回复: 6

求大神解惑,为何我改过后的12864编译成功但是不能成功点亮?

[复制链接]

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-3-28
在线时间
0 小时
发表于 2015-5-31 15:29:08 | 显示全部楼层 |阅读模式
5金钱
我根据库函数版本修改的,想改成寄存器版本的,但是编译成功了却不能点亮,我也知道编译成功并不代表什么,但是我找了很久找不出原因,希望各位大大能帮忙一下,谢谢!!
下面是12864.c
[mw_shl_code=c,true]#include "stm32f10x.h" #include"12864.h" #include"delay.h" /************************************************************************************************ //FILE:液晶12864驱动程序 //VERS:1.0 //AUTHOR:福建师范大学林木泉 //DATE:2012/07/11 ************************************************************************************************/ /************************************************************************************************ @f_name: void LCD12864_InitPort(void) @brief: 初始化硬件端口配置 @param: None @return: None ************************************************************************************************/ void LCD12864_InitPort(void) { RCC->APB2ENR|=1<<3; GPIOB->CRH&=0; GPIOB->CRH|=0X77777777;//数据位开漏输出 PB8~PB15 GPIOB->ODR=0XFF00; GPIOB->CRL&=0XFF000F00; GPIOB->CRL|=0X00333033;//CMD推挽输出 PB0 PB1 PB3 PB4 PB5 GPIOB->ODR|=0X00ff; } /************************************************************************************************ @f_name: void NOP(void) @brief: 延时函数 @param: None @return: None ************************************************************************************************/ void NOP(void) { u8 i; for(i=0; i<100; i++); } /************************************************************************************************ @f_name: u8 LCD12864_busy(void) @brief: 检测忙状态 @param: None @return: None ************************************************************************************************/ u8 LCD12864_busy(void) { u8 x; RS=0; RW=1; EN=1; NOP(); NOP(); x=Text_Busy; EN=0; return x; } /************************************************************************************************ @f_name: void LCD12684_Wcmd(u8 dat) @brief: 写指令 @param: u8 dat 输入指令 @return: None ************************************************************************************************/ void LCD12684_Wcmd(u8 dat) { while(LCD12864_busy()); //忙检测 RS=0; RW=0; EN=0; NOP(); NOP(); LCD_WriteData(dat); NOP(); NOP(); EN=1; NOP(); NOP(); EN=0; } /************************************************************************************************ @f_name: void LCD12684_Wcmd(u8 dat) @brief: 写数据 @param: u8 dat 输入数据 @return: None ************************************************************************************************/ void LCD12684_Wdat(u8 dat) { while(LCD12864_busy()); //忙检测 RS=1; RW=0; EN=0; NOP(); NOP(); LCD_WriteData(dat); NOP(); NOP(); EN=1; NOP(); NOP(); EN=0; } /************************************************************************************************ @f_name: void LCD12864_Init(void) @brief: 液晶初始化 @param: None @return: None ************************************************************************************************/ void LCD12864_Init(void) { PSB=1; //并口方式 RST=0; //液晶复位 低电平有效 delay_ms(3); RST=1; //置高电平等待复位 delay_ms(3); LCD12684_Wcmd(0x34); //扩充指令操作 delay_ms(5); LCD12684_Wcmd(0x30); //基本指令操作 delay_ms(5); LCD12684_Wcmd(0x0c); //显示开,关光标 delay_ms(5); LCD12684_Wcmd(0x01); //清除LCD的显示内容 delay_ms(5); } /************************************************************************************************ @f_name: void LCD12864_Clr(void) @brief: 清屏 @param: None @return: None ************************************************************************************************/ void LCD12864_Clr(void) { LCD12684_Wcmd(0x34); //扩充指令操作 “绘图” delay_ms(5); LCD12684_Wcmd(0x30); //基本指令操作 delay_ms(5); LCD12684_Wcmd(0x01); //清屏 delay_ms(5); } /************************************************************************************************ @f_name: void LCD12864_Pos(u8 x,u8 y) @brief: 设置显示位置 @param: u8 x:X轴 u8 y:Y轴 @return: None ************************************************************************************************/ void LCD12864_Pos(u8 x,u8 y) { u8 pos; if (x==1) {x=0x80;} else if (x==2) {x=0x90;} else if (x==3) {x=0x88;} else if (x==4) {x=0x98;} else x=0x80; pos = x+y ; LCD12684_Wcmd(pos); //显示地址 } /************************************************************************************************ @f_name: void LCD12864_PhotoDis(u8 *bmp) @brief: 显示图形 @param: u8 *bmp 图形数组 @return: None ************************************************************************************************/ void LCD12864_PhotoDis(u8 *bmp) { u8 i,j; LCD12684_Wcmd(0x34); //关闭图形显示 for(i=0;i<32;i++) { LCD12684_Wcmd(0x80+i); //先写入水平坐标值 LCD12684_Wcmd(0x80); //写入垂直坐标值 for(j=0;j<16;j++) //再写入两个8位元的数据 LCD12684_Wdat(*bmp++); delay_ms(1); } for(i=0;i<32;i++) { LCD12684_Wcmd(0x80+i); LCD12684_Wcmd(0x88); for(j=0;j<16;j++) LCD12684_Wdat(*bmp++); delay_ms(1); } LCD12684_Wcmd(0x36); //写完数据,开图形显示 } /************************************************************************************************ @f_name: void LCD_ShowString(u8 x,u8 y,const u8 *p) @brief: 显示字符串 @param: u8 *bmp 图形数组 @return: None ************************************************************************************************/ void LCD_ShowString(u8 x,u8 y,const u8 *p) { u8 temp; if(x>4) {x=1;} if(y>4) {y=0;} LCD12864_Pos(x,y); temp=*p; while(temp!='\0') { LCD12684_Wdat(temp); temp=*(++p); } } [/mw_shl_code]
然后是12864.h
[mw_shl_code=c,true]#ifndef __12864_H_ #define __12864_H_ #include"sys.h" //管脚定义,移植修改区 //************************************************************************************************************************** #define LCD12864_GPIO GPIOB #define GPIOCLK RCC_APB2Periph_GPIOB #define RS PBout(0) #define RW PBout(1) #define EN PBout(3) #define PSB PBout(4) #define RST PBout(5) #define Busy PBout(15) #define LCD_GPIO_DAT GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10 |GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15 #define LCD_GPIO_CMD GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5 #define LCD_RS(x) x ? GPIOB->ODR|=0X0001: GPIOB->ODR&=~0X0001 //置1或置0 但是我发现我这样用用不了。。。。 #define LCD_RW(x) x ? GPIOB->ODR|=0X0002: GPIOB->ODR&=~0X0002 #define LCD_EN(x) x ? GPIOB->ODR|=0X0004: GPIOB->ODR&=~0X0004 #define LCD_PSB(x) x ? GPIOB->ODR|=0X0008: GPIOB->ODR&=~0X0008 #define LCD_RST(x) x ? GPIOB->ODR|=0X0010: GPIOB->ODR&=~0X0010 #define Text_Busy PBin(15) //PBin(7) #define LCD_WriteData(x) {LCD12864_GPIO->BSRR = x<<8 & 0xff00;LCD12864_GPIO->BRR = ((~x)<<8) & 0xff00;} //高8位的数据 //#define LCD_WriteData(x) GPIOB->ODR=(GPIOB->ODR&0x00ff)|(x&0xff00); //高8位的数据 //#define LCD_WriteData(x) {LCD12864_GPIO->BSRR = x & 0x00ff;LCD12864_GPIO->BRR = ((~x)<<8) & 0x00ff;} //低8位的数据 void LCD12864_InitPort(void); //硬件端口初始化 void NOP(void); //延时函数 u8 LCD12864_busy(void); //检测忙状态 void LCD12684_Wcmd(u8 dat); //写指令 void LCD12684_Wdat(u8 dat); //写数据 void LCD12864_Init(void); //液晶初始化 void LCD12864_Clr(void); // 清屏 void LCD12864_Pos(u8 x,u8 y); //设置显示位置 void LCD12864_PhotoDis(u8 *bmp); // 显示图片 void LCD_ShowString(u8 x,u8 y,const u8 *p); // 显示字符串 //********************************************************************************************************************** #endif [/mw_shl_code]

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-3-28
在线时间
0 小时
 楼主| 发表于 2015-5-31 15:29:09 | 显示全部楼层
原版的库函数

DIS12864.zip

305.42 KB, 下载次数: 51

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-31 18:54:32 | 显示全部楼层
帮顶。。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-3-28
在线时间
0 小时
 楼主| 发表于 2015-5-31 19:14:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥来了,求助~~·
回复

使用道具 举报

34

主题

149

帖子

0

精华

高级会员

Rank: 4

积分
889
金钱
889
注册时间
2012-9-11
在线时间
153 小时
发表于 2015-6-1 09:31:37 | 显示全部楼层
回复【3楼】wbxccl:
---------------------------------
求原来库函数版本程序
http://url.cn/PqU0jG
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2015-3-28
在线时间
0 小时
 楼主| 发表于 2015-6-1 10:27:14 | 显示全部楼层
回复【4楼】physics:
---------------------------------
4楼就是原版的库函数
回复

使用道具 举报

34

主题

149

帖子

0

精华

高级会员

Rank: 4

积分
889
金钱
889
注册时间
2012-9-11
在线时间
153 小时
发表于 2015-6-3 11:44:40 | 显示全部楼层
回复【6楼】wbxccl:
---------------------------------
谢谢,收到了
http://url.cn/PqU0jG
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 18:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表