OpenEdv-开源电子网

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

应广论坛友强烈要求:写下STM32F407VET6串行驱动LCD12864工程文件 !可以使用!

[复制链接]

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2014-9-7
在线时间
11 小时
发表于 2016-7-8 22:41:51 | 显示全部楼层 |阅读模式
#include "12864.h"
#include "delay.h"       


#define uchar unsigned char
#define uint  unsigned int




uchar const TABLE[]=
  {   
   0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,         
   0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,         
   0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,        
   0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      
  };


void SendByte(uchar Dbyte)   
{   
     uchar i;   
     for(i=0;i<8;i++)   
     {   
                        GPIO_ResetBits(LCD_CLK);
                        if(Dbyte&0x80)
                                GPIO_SetBits(LCD_DATA);
                        else
                                GPIO_ResetBits(LCD_DATA);
                        Dbyte=Dbyte<<1;      
                   delay_us(10);       
                        GPIO_SetBits(LCD_CLK);
                        delay_us(10);       
                        GPIO_ResetBits(LCD_CLK);
                        delay_us(10);
     }   
}  


uchar ReceiveByte(void)
{
     uchar i,temp1,temp2;
     temp1 = 0;
     temp2 = 0;
     for(i=0;i<8;i++)
     {
           temp1=temp1<<1;
           GPIO_ResetBits(LCD_CLK);
                   delay_us(10);
           GPIO_SetBits(LCD_CLK);
                   delay_us(10);
           GPIO_ResetBits(LCD_CLK);
           if(GPIO_ReadInputDataBit(LCD_DATA)) temp1++;
     }
     for(i=0;i<8;i++)
     {
           temp2=temp2<<1;
           GPIO_ResetBits(LCD_CLK);
                   delay_us(5);
           GPIO_SetBits(LCD_CLK);
                   delay_us(5);
           GPIO_ResetBits(LCD_CLK);
           if(GPIO_ReadInputDataBit(LCD_DATA)) temp2++;
     }
     return ((0xf0&temp1)+(0x0f&temp2));
}


void CheckBusy(void)
{
     do  SendByte(0xfc);         
     while(0x80&ReceiveByte());        
}


void WriteCommand(uchar Cbyte )   
{   
        GPIO_SetBits(LCD_CS);      
  delay_ms(1);
        SendByte(0xf8);              
        SendByte(0xf0&Cbyte);         
        SendByte(0xf0&Cbyte<<4);     
        GPIO_ResetBits(LCD_CS);
        delay_ms(2);
}


void WriteData(uchar Dbyte )   
{   
     GPIO_SetBits(LCD_CS);  
    delay_ms(1);  
     SendByte(0xfa);              
     SendByte(0xf0&Dbyte);        
     SendByte(0xf0&Dbyte<<4);     
     GPIO_ResetBits(LCD_CS);   
         delay_ms(2);
}


void LCD_GPIO_Config(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;  //设一个 初始化GPIO口时候用的 结构体
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE); //使能PA口的时钟,否则端口是不工作的
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4; //对结构体的GPIO_Pin对象赋值,声明要操作的是1,2,3,4端口
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//对结构体的GPIO_Mode对象赋值,声明IO口的模式是输出
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//对结构体的GPIO_OType对象赋值,声明IO口的结构是推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//对结构体的GPIO_Speed对象赋值,声明速度是50MHz
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //对结构体的GPIO_PuPd对象赋值,声明内部上拉
        GPIO_Init(GPIOA, &GPIO_InitStructure);//将结构体带入初始化函数中,执行初始化,否则之前设置都是无效的
}


void lcd_init(void)  
{
        LCD_GPIO_Config();
        delay_ms(5);
        GPIO_ResetBits(LCD_PSB);     
        GPIO_ResetBits(LCD_RST);         
        delay_ms(100);
        GPIO_SetBits(LCD_RST);         
        delay_ms(5);


        WriteCommand(0x30);      
        WriteCommand(0x30);         
        WriteCommand(0x0C);         
        WriteCommand(0x01);      
        delay_ms(20);
        WriteCommand(0x06);     
}


void LcmClearTXT( void )   
{   
     uchar i;   
     WriteCommand(0x30);      
     WriteCommand(0x80);      
     for(i=0;i<64;i++)   
     WriteData(0x20);   
}   
   


void LcmClearBMP( void )   
{   
     uchar i,j;   
     WriteCommand(0x34);      
     WriteCommand(0x36);      
     for(i=0;i<32;i++)            
     {   
           WriteCommand(0x80|i);      
           WriteCommand(0x80);         
           for(j=0;j<32;j++)           
           WriteData(0);   
     }   
}   
  
void PutStr(uchar row,uchar col,uchar *puts)   
{   
     WriteCommand(0x30);      
     WriteCommand(TABLE[8*row+col]);      
     while(*puts != '\0')     
     {   
           if(col==8)            
           {              
                 col=0;   
                 row++;   
           }   
           if(row==4) row=0;      
           WriteCommand(TABLE[8*row+col]);   
           WriteData(*puts);      
           puts++;   
           WriteData(*puts);   
           puts++;   
           col++;   
     }   
}


void PutBMP(uchar *puts)   
{   
     uint x=0;   
     uchar i,j;   
     WriteCommand(0x34);        
     WriteCommand(0x36);        
     for(i=0;i<32;i++)               
     {   
           WriteCommand(0x80|i);        
           WriteCommand(0x80);        
           for(j=0;j<32;j++)         
           {            
                 WriteData(puts[x]);   
                 x++;   
           }   
     }   
}   


void DisplayDots(uchar DotByte)   
{   
     uchar i,j;   
     WriteCommand(0x34);      
     WriteCommand(0x36);         
     for(i=0;i<32;i++)               
     {   
           WriteCommand(0x80|i);        
           WriteCommand(0x80);        
           for(j=0;j<32;j++)         
           {           
              WriteData(DotByte);                     
           }   
           DotByte=~DotByte;   
     }   
}  


//=========================
#ifndef __12864_H
#define __12864_H
#include "sys.h"

#define uchar unsigned char
#define uint  unsigned int

#define CLEAR_SCREEN 0x01   
#define AC_INIT   0x02   
#define CURSE_ADD  0x06   
#define FUN_MODE  0x30   
#define DISPLAY_ON  0x0c   
#define DISPLAY_OFF  0x08   
#define CURSE_DIR  0x14   
#define SET_CG_AC  0x40   
#define SET_DD_AC  0x80

#define LCD_CS          GPIOA, GPIO_Pin_0  
#define LCD_DATA        GPIOA, GPIO_Pin_1  
#define LCD_CLK         GPIOA, GPIO_Pin_2  
#define LCD_PSB         GPIOA, GPIO_Pin_3  
#define LCD_RST         GPIOA, GPIO_Pin_4   

void SendByte(uchar Dbyte);
void WriteCommand(uchar Cbyte );
void WriteData(uchar Dbyte );
uchar ReceiveByte(void);
void CheckBusy(void);
void LCD_GPIO_Config(void);
void lcd_init(void);
void LcmClearTXT( void );
void LcmClearBMP( void );
void PutStr(uchar row,uchar col,uchar *puts);
void PutBMP(uchar *puts);
void DisplayDots(uchar DotByte);

#endif
//============================================
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "12864.h"


unsigned char str1[]="abcd";  

int main(void)
{

        delay_init(168);                 
        LED_Init();                     
        lcd_init();
  PutStr(0,0,str1);
  while(1)
        {
         
                  
               
         }
}

       
//==============================================================






















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

使用道具 举报

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2014-9-7
在线时间
11 小时
 楼主| 发表于 2016-7-8 23:14:44 | 显示全部楼层
hellow world!

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-7-19
在线时间
6 小时
发表于 2016-7-19 17:53:58 | 显示全部楼层
此帖仅作者可见

使用道具 举报

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2014-9-7
在线时间
11 小时
 楼主| 发表于 2016-7-21 07:36:57 | 显示全部楼层
此帖仅作者可见
hellow world!

使用道具 举报

11

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
492
金钱
492
注册时间
2015-3-3
在线时间
114 小时
发表于 2016-7-21 08:42:40 | 显示全部楼层
此帖仅作者可见

使用道具 举报

5

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-27
在线时间
13 小时
发表于 2016-9-4 16:54:59 | 显示全部楼层
此帖仅作者可见

使用道具 举报

0

主题

125

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2728
注册时间
2015-10-29
在线时间
428 小时
发表于 2016-9-10 11:04:57 | 显示全部楼层
此帖仅作者可见

使用道具 举报

14

主题

191

帖子

0

精华

QQ游客

积分
813
金钱
813
注册时间
2013-6-9
在线时间
181 小时
发表于 2016-9-10 14:46:44 | 显示全部楼层
此帖仅作者可见

使用道具 举报

3

主题

144

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7342
金钱
7342
注册时间
2016-2-6
在线时间
1863 小时
发表于 2016-9-10 15:28:57 | 显示全部楼层
此帖仅作者可见

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2016-9-10
在线时间
5 小时
发表于 2016-9-10 19:42:15 | 显示全部楼层
此帖仅作者可见

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2017-4-25
在线时间
11 小时
发表于 2017-4-25 16:57:33 | 显示全部楼层
此帖仅作者可见

使用道具 举报

4

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2017-3-11
在线时间
78 小时
发表于 2017-5-1 14:29:23 | 显示全部楼层
此帖仅作者可见

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-5-5
在线时间
6 小时
发表于 2017-5-13 09:56:38 | 显示全部楼层
此帖仅作者可见

使用道具 举报

13

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
344
金钱
344
注册时间
2012-7-13
在线时间
83 小时
发表于 2017-7-2 14:01:32 | 显示全部楼层
此帖仅作者可见

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-7-8
在线时间
0 小时
发表于 2017-7-8 17:02:42 | 显示全部楼层
此帖仅作者可见

使用道具 举报

1

主题

374

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1309
金钱
1309
注册时间
2014-7-23
在线时间
418 小时
发表于 2017-7-8 20:44:44 | 显示全部楼层
此帖仅作者可见

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-11-9
在线时间
6 小时
发表于 2017-11-10 09:48:31 | 显示全部楼层
此帖仅作者可见

使用道具 举报

15

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2017-2-21
在线时间
159 小时
发表于 2017-11-13 17:24:08 | 显示全部楼层
此帖仅作者可见

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-1-9
在线时间
23 小时
发表于 2020-5-9 17:28:02 | 显示全部楼层
此帖仅作者可见

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2020-7-7
在线时间
13 小时
发表于 2020-8-12 18:22:06 | 显示全部楼层
此帖仅作者可见

使用道具 举报

4

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2017-6-14
在线时间
70 小时
发表于 2021-10-21 18:03:10 | 显示全部楼层
此帖仅作者可见

使用道具 举报

1

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2014-4-7
在线时间
36 小时
发表于 2022-5-30 18:48:27 | 显示全部楼层
此帖仅作者可见

使用道具 举报

6

主题

43

帖子

0

精华

高级会员

Rank: 4

积分
820
金钱
820
注册时间
2021-6-20
在线时间
87 小时
发表于 2022-6-5 21:01:46 | 显示全部楼层
此帖仅作者可见

使用道具 举报

0

主题

7

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1231
金钱
1231
注册时间
2019-7-30
在线时间
129 小时
发表于 2024-5-7 08:59:47 | 显示全部楼层
此帖仅作者可见

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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