OpenEdv-开源电子网

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

stm32 驱动12864的程序

[复制链接]

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
发表于 2013-5-14 10:08:28 | 显示全部楼层 |阅读模式
大家好
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-5-14 10:12:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-14 10:13:43 | 显示全部楼层
为啥啊。。。我写并口的。用stm32写
大家好
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2013-5-14 11:27:42 | 显示全部楼层
在论坛里搜一下吧....有几个能用的
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2013-5-14 11:43:58 | 显示全部楼层
回复【3楼】渴望一份平淡:
---------------------------------
论坛里串口并口都有的  亲!
往事随风!
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2013-5-14 11:45:57 | 显示全部楼层
http://www.openedv.com/posts/list/0/8968.htm#85584
往事随风!
回复 支持 反对

使用道具 举报

8

主题

130

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-5-14 13:25:58 | 显示全部楼层
我前几天刚刚调出来一个带字库的12864液晶的驱动程序,不是太完善,但是能用,只有写指令,写数据,定显示位置等几个简单函数,希望对你有用,明天我传上来,现在不在我的电脑旁边
你猜你猜你再猜
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-14 16:56:04 | 显示全部楼层
回复【7楼】895855913:
---------------------------------
谢了哥们。。。
大家好
回复 支持 反对

使用道具 举报

8

主题

130

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-5-21 18:25:18 | 显示全部楼层
回复【8楼】渴望一份平淡:
---------------------------------
现在才记起 不知道能不能解决你问题
你猜你猜你再猜
回复 支持 反对

使用道具 举报

8

主题

130

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-5-21 18:26:10 | 显示全部楼层
/* Includes ---------------------------------------------------------------*/
#include"stm32f10x.h"
#include <stdio.h>
#include"LCD_12864.h"
/****************************************************************************
* 名    称:void LCD_12864_GPIO_Config(void)
* 功    能:12864液晶各端口初始化,配置各端口方式
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:LCD_12864_GPIO_Config();
****************************************************************************/
void LCD_12864_GPIO_Config(void)
{

GPIO_InitTypeDef GPIO_InitStructure;

/* 打开各端口时钟------------------------------------------------------*/
RCC_APB2PeriphClockCmd(RCC_GPIO_A,ENABLE); 

/* 配置端口A输出口-----------------------------------------------------*/
GPIO_InitStructure.GPIO_Pin=DATA_OUT|CON_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/****************************************************************************
* 名    称:void Delayms(uint32_t ms)
* 功    能:延时函数
* 入口参数:nCount
* 出口参数:无
* 说    明:
* 调用方法:Delayms(1);延时1毫秒
****************************************************************************/
void Delayms(uint32_t ms)
{
    uint32_t  i, j; 

    for( i = ms; i > 0; i-- ) 
    { 
        for( j = 7200 ; j > 0 ; j-- ) 
        {} 
    } 
}

/****************************************************************************
* 名    称:char LCD_BUSY()
* 功    能:检查液晶是否忙
* 入口参数:无
* 出口参数:unsigned char 0x80 OR 0x00
* 说    明:
* 调用方法:LCD_BUSY();
****************************************************************************/
void LCD_BUSY(void)
{
     u8 temp=0; 
     GPIO_InitTypeDef GPIO_InitStructure;

     GPIO_ResetBits(GPIOA,GPIO_RS);
     GPIO_SetBits(GPIOA,GPIO_RW);
     
 
    // 第7位读状态 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
    Delayms(1); 
    do{ 
        GPIO_SetBits(GPIOA,GPIO_LCD_EN);
                Delayms(1); 
                temp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7);
                GPIO_ResetBits(GPIOA,GPIO_LCD_EN); 
                Delayms(1);
                

                 
    }while(temp);//等待不忙 
   GPIO_ResetBits(GPIOA,GPIO_LCD_EN);   
  //--------把D7 设为输出
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  Delayms(1);
  //---------------------
}
/****************************************************************************
* 名    称:void Write_Order(unsigned char Order)
* 功    能:写液晶指令
* 入口参数:Order
* 出口参数:无
* 说    明:
* 调用方法:Write_Order(unsigned char Order);
****************************************************************************/
void Write_Order(vu8 portValue)
{
   u16 tmpData;  
   LCD_BUSY(); 
   GPIO_ResetBits(GPIOA,GPIO_RS);
   GPIO_ResetBits(GPIOA,GPIO_RW);
   GPIO_ResetBits(GPIOA,GPIO_LCD_EN); 

   tmpData = GPIO_ReadOutputData(GPIOA); // 读端口数据 
   tmpData &= 0xFF00;                       // 清掉低8位 
   GPIO_Write(GPIOA, (tmpData|((u16)portValue))); 

   Delayms(1);
   GPIO_SetBits(GPIOA,GPIO_LCD_EN);
   Delayms(1); 
   GPIO_ResetBits(GPIOA,GPIO_LCD_EN); 
   Delayms(1); 
}

/****************************************************************************
* 名    称:void Write_Data(unsigned char Data)
* 功    能:写液晶数据
* 入口参数:Data
* 出口参数:无
* 说    明:
* 调用方法:Write_Data(unsigned char Data);
****************************************************************************/
void Write_Data(vu8 portValue)
{
    u16 tmpData;
    LCD_BUSY();
    GPIO_ResetBits(GPIOA,GPIO_RW); 
    GPIO_SetBits(GPIOA,GPIO_RS); 
GPIO_ResetBits(GPIOA,GPIO_LCD_EN); 

    tmpData = GPIO_ReadOutputData(GPIOA); // 读端口数据 
    tmpData &= 0xFF00;                       // 清掉低8位 
    GPIO_Write(GPIOA,(tmpData|((u16)portValue)));     // 写数据到端口

    Delayms(1); 
    GPIO_SetBits(GPIOA,GPIO_LCD_EN);
    Delayms(1); 
    GPIO_ResetBits(GPIOA,GPIO_LCD_EN); 
    Delayms(1); 
}
/****************************************************************************
* 名    称:void LCD_12864_Config(void)
* 功    能:12864显示初始化
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:LCD_12864_Config();
****************************************************************************/
void LCD_12864_Config(void)

/* 液晶使用并口方式----------------------------------------------------*/
GPIO_SetBits(GPIOA,GPIO_PSB);       
/* 扩充指令操作--------------------------------------------------------*/
Write_Order(0x34);      
    Delayms(5);
    /* 基本指令操作--------------------------------------------------------*/
Write_Order(0x30);     
    Delayms(5);
/* 显示开,关光标------------------------------------------------------*/
Write_Order(0x0c);    
    Delayms(5);
    /* 清除LCD的显示内容---------------------------------------------------*/
Write_Order(0x01);   
    Delayms(5);
}

/****************************************************************************
* 名    称:void LCD_POS(char X,char Y)
* 功    能:设定显示位置
* 入口参数:char Y,   char Y
* 出口参数:无
* 说    明:
* 调用方法:LCD_POS(char X,char Y);
****************************************************************************/
void LCD_POS(unsigned char X,unsigned char Y)

   unsigned char  OS;
   if (X==0)
     {X=0x80;}
   else if (X==1)
     {X=0x90;}
   else if (X==2)
     {X=0x88;}
   else if (X==3)
     {X=0x98;}
   OS = X+Y ;  
   /* 显示地址------------------------ -------------------------------------*/
   Write_Order(POS);
}
你猜你猜你再猜
回复 支持 反对

使用道具 举报

9

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-23 10:12:28 | 显示全部楼层
我没加判忙函数,结果可以用了。还是谢谢你啊。。。
大家好
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-19 15:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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