研究了一下,如何用ATmega 16单片机,来驱动字符型液晶显示芯片,现把研究心得写出来:
我手里的这个RT1601液晶显示模块,使用的是S6A0069显示芯片。
各个引脚简单说明一下:
控制和数据引脚配置如下:
-------------------------------
PORTD_0 - RS
PORTD_1 - R/W
PORTD_2 - E
PORTA - DATA BUS
------------------------------
LCD.h
1#ifndef _LCD_H_
2#define _LCD_H_
3/*****************************************
4RS - PORTD_0
5R/W - PORTD_1
6E - PORTD_2
7DB - PORTA
8******************************************/
9void LCD_Set_RS(void);
10void LCD_Clear_RS(void);
11void LCD_Set_RW(void);
12void LCD_Clear_RW(void);
13void LCD_Set_E(void);
14void LCD_Clear_E(void);
15void LCD_CheckBF(void);
16// Write Command
17void LCD_Write_Cmd(unsigned char byCmd);
18// Write Data
19void LCD_Write_Data(unsigned char byData);
20void LCD_Delay_5ms(void);
21void LCD_Delay_500ms(void);
22void LCD_PortInit(void);
23
24// Application Interface
25void LCD_Init(void);
26void LCD_Display(char* pstrText);
27
28#endif
29
LCD.c
这里是液晶驱动的实现部分,对外开放两个接口:LCD_Init, LCD_Display。(我这个模块,是两行显示的,共16个字符)
1#include "LCD.h"
2#include
3#include
4
5/*****************************************
6RS - PORTD_0
7R/W - PORTD_1
8E - PORTD_2
9DB - PORTA
10******************************************/
11
12
13void LCD_Set_RS(void)
14{
15 PORTD |= (1 << 0);
16
17 return;
18}
19
20void LCD_Clear_RS(void)
21{
22 PORTD &= ~(1 << 0);
23
24 return;
25}
26
27void LCD_Set_RW(void)
28{
29 PORTD |= (1 << 1);
30
31 return;
32}
33
34void LCD_Clear_RW(void)
35{
36 PORTD &= ~(1 << 1);
37
38 return;
39}
40
41void LCD_Set_E(void)
42{
43 PORTD |= (1 << 2);
44
45 return;
46}
47
48void LCD_Clear_E(void)
49{
50 PORTD &= ~(1 << 2);
51
52 return;
53}
54
55void LCD_CheckBF(void)
56{
57 DDRA = 0x00; // Input
58
59 LCD_Clear_RS();
60 LCD_Set_RW();
61 LCD_Set_E();
62 while (PINA & 0x80)
63 {
64 ;
65 }
66 LCD_Clear_E();
67
68 DDRA = 0xFF; // Output
69
70 return;
71}
72
73// Write Command
74void LCD_Write_Cmd(unsigned char byCmd)
75{
76 LCD_CheckBF();
77
78 LCD_Clear_RS();
79 LCD_Clear_RW();
80 LCD_Set_E();
81 PORTA = byCmd;
82 LCD_Clear_E();
83
84 return;
85}
86
87// Write Data
88void LCD_Write_Data(unsigned char byData)
89{
90 LCD_CheckBF();
91
92 LCD_Set_RS();
93 LCD_Clear_RW();
94 LCD_Set_E();
95 PORTA = byData;
96 LCD_Clear_E();
97
98 return;
99}
100
101void LCD_Delay_5ms(void)
102{
103 unsigned int i = 5552;
104 while (i--)
105 {
106 ;
107 }
108
109 return;
110}
111
112void LCD_Delay_500ms(void)
113{
114 unsigned char i = 5;
115 unsigned char j = 0;
116
117 while (i--)
118 {
119 j = 7269;
120 while (j--)
121 {
122 ;
123 }
124 }
125
126 return;
127}
128
129// Port Init
130void LCD_PortInit(void)
131{
132 PORTD = 0x00;
133 DDRD = 0xFF; // Output
134 DDRA = 0xFF;
135
136 return;
137}
138
139// LCD Init
140void LCD_Init(void)
141{
142 LCD_PortInit();
143
144 LCD_Delay_500ms();
145
146 LCD_Write_Cmd(0x38); // Function Set. 8bit data length, 2-line, 5*8 font
147 LCD_Delay_5ms();
148 LCD_Write_Cmd(0x0C); // Display ON/OFF Control. Display ON, Cursor OFF, Blink OFF
149 LCD_Delay_5ms();
150 LCD_Write_Cmd(0x01); // Display Clear.
151 LCD_Delay_5ms();
152 LCD_Write_Cmd(0x06); // Entry Mode Set. Increment mode, Entire shift off
153
154 return;
155}
156
157void LCD_Display(char* pstrText)
158{
159 unsigned char i = 0;
160
161 LCD_Write_Cmd(0x80 | 0x00); // 1 Line Position
162 while (*pstrText != 0x00)
163 {
164 if (i == 8)
165 {
166 LCD_Write_Cmd(0x80 | 0x40); // 2 Line Position
167 }
168
169 LCD_Write_Data(*(pstrText++));
170 i++;
171 }
172
173 return;
174}
175
176
client端调用如下:
1//ICC-AVR application builder : 2008-6-4 8:41:19
2// Target : M16
3// Crystal: 4.0000Mhz
4#include
5#include
6#include "LCD.h"
7
8void main(void)
9{
10 LCD_Init();
11 LCD_Display("RT1601Demo by WF");
12
13 while (1)
14 {
15 ;
16 }
17
18 return;
19}
好了,就这些,有关该芯片的详细资料,请查看 S6A0069资料。
上一篇:avr复习笔记--iic读写多个24cxxx
下一篇:AVR单片机中的EEPROM
推荐阅读最新更新时间:2024-03-16 15:29
设计资源 培训 开发板 精华推荐
- 喜大普奔,起底USB Tybe-C 五大干货!
- 更新个人资料赢惊喜大礼
- 艾睿电子&ADI有奖直播:无需光耦的flyback隔离电源设计
- TI即将直播【 MSP430 系列最新超声波流量测量方案】,你会错过?报名看直播赢双重好礼喽!
- 3月21日有奖直播:ADI新一代高阻抗输入SAR ADC的优势与应用
- 【已结束】 Qorvo、村田、NI直播【UWB最新技术、方案、市场、应用解析】(13:30开始入场)
- 2021 Digi‑Key KOL 视频系列:新型智能曝光算法在人脸识别中的应用
- 【EEWORLD第三十届】2011年09月社区明星人物揭晓!
- 购买TI store MSP432P401R LaunchPad 晒单就送礼!