OpenEdv-开源电子网

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

12864 和stm32这样写对吗

[复制链接]

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
发表于 2013-5-14 10:12:38 | 显示全部楼层 |阅读模式

#include<stm32f10x_lib.h>
#include "delay.h"
#include "lcd_12864.h"
/*******************************************************************/
/*                                                                 */
/* 端口初始化                                                   */
/* 。      */
/*                                                                 */
/*******************************************************************/
void LCD_Init(void)
{
 RCC->APB2ENR|=1<<3;    //使能PORTB时钟     
 RCC->APB2ENR|=1<<2;    //使能PORTA时钟                   
 GPIOA->CRL&=0X0000FFFF;
 GPIOA->CRL|=0X03330000;//PE.5推挽输出
 GPIOA->ODR|=7<<4;      //PE.5输出高
}
/*******************************************************************/
/*                                                                 */
/* 输出端口初始化                                                   */
/* 。      */
/*                                                                 */
/*******************************************************************/
void DATA_out(void)
{

 GPIOB->CRH&=0X00000000;
 GPIOB->CRH|=0X33333333;//PB0,1,2,3,4,5,6,7推挽输出    
    GPIOB->ODR|=0XFF00;      //PB输出高

}
/*******************************************************************/
/*                                                                 */
/* 输入端口初始化                                                   */
/* 。      */
/*                                                                 */
/*******************************************************************/
void DATA_in(void)
{

 GPIOB->CRH&=0XFFFFFFFF;
 GPIOB->CRH|=0X88888888;//PB0,1,2,3,4,5,6,7推挽输入   
}
/*******************************************************************/
/*                                                                 */
/*检查LCD忙状态                                                    */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
/*                                                                 */
/*******************************************************************/
u8 lcd_busy(void)
 {                         
   u8 result;       
 DATA_in();          
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    result = (u8)(GPIOB->IDR&0x0080);
    LCD_EN = 0;
 DATA_out();
 return(result);
 }
/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*                                                                 */
/*******************************************************************/
void lcd_wcmd(u8 cmd)
{                         
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
  delay_ms(2);  
    DATAOUT(cmd);
    delay_ms(2);
    LCD_EN = 1;
    delay_ms(2);
    LCD_EN = 0; 
}
/*******************************************************************/
/*                                                                 */
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*                                                                 */
/*******************************************************************/
void lcd_wdat(u8 dat)
{                         
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
  delay_ms(2);
    DATAOUT(dat);
    delay_ms(2);
    LCD_EN = 1;
    delay_ms(2);
    LCD_EN = 0;
}
/*******************************************************************/
/*                                                                 */
/*  LCD初始化设定                                                  */
/*                                                                 */
/*******************************************************************/
void lcd_init(void)
{
    LCD_PSB =1;
    lcd_wcmd(0x38);      //扩充指令操作
    delay_ms(2);
    lcd_wcmd(0x30);      //基本指令操作
    delay_ms(2);
    lcd_wcmd(0x0C);      //显示开,关光标
    delay_ms(2);
    lcd_wcmd(0x01);      //清除LCD的显示内容
    delay_ms(2);
}
 
/*********************************************************/
/*                                                       */
/* 设定显示位置                                          */
/*                                                       */
/*********************************************************/
void lcd_display(u8 X,u8 Y,u8*s)
{                              
   u8  pos,i;
   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}
   pos = X+Y ; 
   lcd_wcmd(pos);     //显示地址  
    for(i=0;i<16;i++)
     {                         //显示字符
       lcd_wdat(s);
    delay_ms(2);    
     }
   
}

 

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

使用道具 举报

8

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2013-4-19
在线时间
0 小时
发表于 2013-5-14 10:31:30 | 显示全部楼层
这个也行啊?12864能用在上面吗,没懂
天道酬勤
回复 支持 反对

使用道具 举报

8

主题

130

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-5-14 13:37:30 | 显示全部楼层
楼主是把郭天祥的51单片机代码搞过来的吧??看着这么眼熟啊,但是我感觉你连32的端口最简单的操作都没搞懂啊,你这么搞明显是不可以的啊
你猜你猜你再猜
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-14 14:21:17 | 显示全部楼层
回复【楼主位】渴望一份平淡:
---------------------------------
void DATA_in(void)
{

 GPIOB->CRH&=0XFFFFFFFF; 
 GPIOB->CRH|=0X88888888;//PB0,1,2,3,4,5,6,7推挽输入    
}
改为:
void DATA_in(void)
{

 GPIOB->CRH&=0X0000000; 
 GPIOB->CRH|=0X88888888;//PB0,1,2,3,4,5,6,7推挽输入    
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-14 16:47:20 | 显示全部楼层
回复【3楼】895855913:
---------------------------------
驱动基本都是一样的,都是st7920驱动。不同的 只是端口设定。。。
大家好
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-14 16:55:27 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------不行吧,开始那句
 GPIOB->CRH&=0X0000000
实现拉低高八位,然后在对其操作啊。0x8 是输入0x3是输出。。。
大家好
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-20 04:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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