OpenEdv-开源电子网

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

这样设计调试也可以啊。怎么就是不显示

[复制链接]

9

主题

53

帖子

0

精华

初级会员

Rank: 2

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

#include <stm32f10x_lib.h>
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd_12864.h"
u8 dis[]={"12864测试"};
int main(void)  //  此处最好在括号里加void
{      
 Stm32_Clock_Init(9);
 delay_init(72);
    lcd_init();
    LCD_Init(); 
 DATA_in();
 DATA_out();
 JTAG_Set(JTAG_SWD_DISABLE); //禁止JTAG/SWD串行线调试
 while(1)
 {
  lcd_display(1,0,dis);
 }      

}
#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|=0X33330000;//PA.5推挽输出
 GPIOA->ODR|=0X00F0;      //PA.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&=0X00000000;
 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劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-14 22:55:22 | 显示全部楼层
说明不可以啊。
DATAOUT,这个定义没看到。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-15 07:29:21 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
#ifndef __LCD__H
#define __LCD__H
#include "sys.h"
#define LCD_RS   Aout(4)           //寄存器选择输入 
#define LCD_RW   Aout(5)            //液晶读/写控制
#define LCD_EN   Aout(6)            //液晶使能控制
#define LCD_PSB  Aout(7)            //液晶使能控制
#define DATAOUT(X)     (GPIOB->ODR&0X00FF)|X 
void LCD_Init(void);
void DATA_out(void);
void DATA_in(void);
u8   lcd_busy(void);
void lcd_wcmd(u8 cmd);
void lcd_wdat(u8 dat);
void lcd_init(void);
void lcd_display(u8 X,u8 Y,u8*s);
#endif
大家好
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-15 10:07:17 | 显示全部楼层
回复【3楼】渴望一份平淡:
---------------------------------
#define DATAOUT(X)     (GPIOB->ODR&0X00FF)|X  
改为:
#define DATAOUT(X)     (GPIOB->ODR&0X00FF)|(X<<8)
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-15 12:59:02 | 显示全部楼层
回复【4楼】正点原子:
--------------------可是ODR是可读写十六位啊。。。
大家好
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-15 14:08:59 | 显示全部楼层
回复【5楼】渴望一份平淡:
---------------------------------
但你用的是高八位作为数据位,我没说错吧?
你直接这样=X,你的X又是个u8型的东东,你觉得能输出么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-15 16:02:34 | 显示全部楼层
是的,但是改了还是不行啊。硬件应该没问题的,我正常点亮啊。可能数据类型不对,我用51做事调时就是因为数据类型不对,结果输出不对。我们比赛我用51程序都写完了。想移植到stm32上。。。
大家好
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-15 16:05:04 | 显示全部楼层
            


大家好
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 18:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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