#include "drive_12864.h" #include <stdarg.h> // ��ͷ�ļ� #include "stdio.h" #include "delay.h" #define L128_RW GPIO_Pin_8 // #define L128_EN GPIO_Pin_9 // #define SET_EN GPIO_SetBits(GPIOA, L128_EN); #define CLR_EN GPIO_ResetBits(GPIOA, L128_EN); #define SET_RW GPIO_SetBits(GPIOA, L128_RW); #define CLR_RW GPIO_ResetBits(GPIOA, L128_RW); void LCD128GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//����ʱ�� GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); } void Senbyte(unsigned char command)//��12864���з���1byte���� { unsigned char i; for(i=0;i<8;i++) { if((command<<i)&0x80) { SET_RW; } else { CLR_RW; } CLR_EN;//sclk =0 // delay_ms(5); SET_EN;//sclk=1 } } void Write_lcd_com(unsigned char command)//��12864дָ��� { // SET_RW; Senbyte(0xf8); Senbyte(command&0xf0); Senbyte((command<<4)&0xF0); delay_us(100); } void Write_lcd_date(unsigned char date)//��12864д���ݺ��� { // SET_RW; Senbyte(0xfa); Senbyte(date & 0xf0); Senbyte((date<<4) & 0xf0); delay_us(100); } void lcd128_Init(void)//12864��ʼ������ { LCD128GPIO_Init(); delay_ms(100); Write_lcd_com(0x30);//����8λ���ݿ� ����ָ��ģʽ delay_us(100); Write_lcd_com(0xc0);//������ʾ�� �α�� ���� delay_us(100); Write_lcd_com(0x30); //����8λ���ݽӿڣ�����ָ��ģʽ Write_lcd_com(0x20); //��DDRAM Write_lcd_com(0x06); //�α꼰��ʾ����һλ Write_lcd_com(0x0c); //������ʾ��,�α�أ����� Write_lcd_com(0x01); //д��ո����� Write_lcd_com(0x80); //�����״���ʾλ�� } /************ д�ַ����ݺ��� ***************** ���ܣ��ڴ��ֿ�12864ָ��λ������ʾ�ַ��� ���� p: ָ�����ʾ����ָ�� x: X���� y: Y���� ************ *********** *****************/ void WriteLcd128_String(char x,char y,char *p) { switch(y) // ������ʾ��ַ { case 0:Write_lcd_com(0x80 + x); // ��һ�� break; case 1:Write_lcd_com(0x90 + x); // �ڶ��� break; case 2:Write_lcd_com(0x88 + x); // ������ break; case 3:Write_lcd_com(0x98 + x); // ������ break; } while(*p != 0) // ѭ����ʾ�ַ���ֱ���������ַ� { Write_lcd_date(*p); // delay(100); p++; } } void L128printf(char x,char y,char *p,...) { char LcdBuff[20]; va_list ap; va_start(ap,p); vsprintf(LcdBuff,p,ap); va_end(ap); WriteLcd128_String(x,y,LcdBuff); }