- #define LCD_CS GPIOA,GPIO_PINS_6 //PA6
- #define LCD_RS GPIOA,GPIO_PINS_10 //PA10
- #define LCD_WR GPIOA,GPIO_PINS_4 //PA4
- #define LCD_RD GPIOA,GPIO_PINS_1 //PA1
- #define LCD_RST GPIOA,GPIO_PINS_8 //PA8
- #define LCD_LED GPIOA,GPIO_PINS_11 //PA11
3、GPIO初始化
- static void lcd_gpio_init(void)
- {
- gpio_init_type gpio_init_struct;
- /* enable the led clock */
- crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
- crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
- /* set default parameter */
- gpio_default_para_init(&gpio_init_struct);
- /* configure the lcd GPIOA gpio */
- gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
- gpio_init_struct.gpio_pins = GPIO_PINS_8|GPIO_PINS_10|GPIO_PINS_9|GPIO_PINS_15|GPIO_PINS_7|GPIO_PINS_6|GPIO_PINS_5;
- gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
- gpio_init(GPIOA, &gpio_init_struct);
-
- /* configure the lcd GPIOB gpio */
- gpio_init_struct.gpio_pins = GPIO_PINS_10|GPIO_PINS_4|GPIO_PINS_3|GPIO_PINS_5|GPIO_PINS_7|GPIO_PINS_9|GPIO_PINS_8;
- gpio_init(GPIOB, &gpio_init_struct);
- }
GPIOA的引脚用于控制,GPIOB0-15做为并口总线。
4、GPIOB写16位数据
- void gpio_lcd_write_data_word(uint16_t* data, size_t length) {
- for (size_t i = 0; i < length; i++) {
- GPIOB->odt = data[i];
- LCD_WR_CLR;
- LCD_WR_SET;
- }
- }
5、LCD写命令
- void lcd_write_comm_word(uint16_t cmd)
- {
- uint16_t c;
- c=0x00FF&cmd;
- LCD_CS_CLR;
- LCD_RS_CLR;
- gpio_lcd_write_data_word(&c, 1);
- LCD_CS_SET;
- }
6、LCD写数据
- void lcd_write_data_word(uint16_t dat)
- {
- uint16_t *d=&dat;
- LCD_CS_CLR;
- LCD_RS_SET;
- gpio_lcd_write_data_word(d, 1);
- LCD_CS_SET;
- }
7、写寄存器
- void lcd_write_register_word(uint16_t addr, uint16_t data)
- {
- lcd_write_comm_word(addr);
- lcd_write_data_word(data);
- }
8、16位并口屏显示效果
可以看出16位(PIN顺序排列)驱动比8位(PIN混乱排列)显示效果有质得飞跃,显示汉字基本没有闪烁。
9、ADC曲线绘制
- void test_run(void)
- {
- int i;
- uint8_t buff[10];
-
- double v;
- if(vmor_flag_index == 1)
- {
- vmor_flag_index = 0;
- v=adc1_ordinary_valuetab[0]*3.3/4096;
- sprintf((char*)buff,"%0.2f",v);
- inputData=176-adc1_ordinary_valuetab[0]*176/4096;
- }
- adc_ordinary_software_trigger_enable(ADC1, TRUE);
- for(i=0;i<43;i++)
- {
- setColor(0X0000);
- drawLine(5*i,canvas[i],5*i+5,canvas[i+1]);
- if(i<42){
- setColor(0XFB80);
- drawLine(5*i,canvas[i+1],5*i+5,canvas[i+2]);
- }
- canvas[i]=canvas[i+1];
- }
- canvas[43]=inputData;
-
- gridding();
- GUI_WriteASCII(154,2,(unsigned char*)buff,0XA7F9,0X13A6);
- delay_ms(50);
- }
画方格图
- void gridding(void)
- {
- uint8_t i,j;
-
- setColor(0X5345);
- setBgColor(0x0000);
-
- for(i=0;i<8;i++)
- {
- if(i!=1)
- drawHLine_step(0,i*22,220,2);
- else drawHLine_step(0,i*22,150,2);
- }
- drawHLine_step(0,175,220,2);
- for(j=0;j<13;j++)
- {
- if(j!=8&&j!=9&&j!=10)
- drawVLine_step(j*20,0,176,2);
- else
- drawVLine_step(j*20,25,176,2);
- }
- drawVLine_step(219,0,176,2);
- }
- void drawHLine_step(unsigned char x, unsigned char y, unsigned char l,uint8_t step)
- {
- setXY(x, y, x+l, y);
- for(int i=0; i<l+1; i++)
- {
- if(i%step==0)
- lcd_write_data_word(fcolor);
- else
- lcd_write_data_word(bcolor);
- }
- clrXY();
- }
8位屏用得比较方便,上面是8位屏显示效果。
test1.rar
(122.36 KB, 下载次数: 15)