最近弄了个12864串行通讯显示,如附件,供大家交流学习。
12864液晶屏的stm32单片机驱动源码和原理图下载:
12864B串行通讯stm32源程序和原理图.rar
(1.43 MB, 下载次数: 477)
STM32F103系列 串行点亮LCD12864B部分源程序预览:
- #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;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; //对结构体的GPIO_Pin对象赋值,声明要操作的是1,2,3,4端口
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//对结构体的GPIO_Mode对象赋值,声明IO口的模式是输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//对结构体的GPIO_OType对象赋值,声明IO口的结构是推挽输出
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);
- }
-
- void lcd_init(void)
- {
- LCD_GPIO_Config();
- delay_ms(5);
- // GPIO_ResetBits(LCD_PSB); //L 串口方式
- 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 LCD_ShowString(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;
- }
- }
-
复制代码
|