初中生
最后登录1970-1-1
在线时间 小时
注册时间2016-12-13
|
接线:
1602的D0-D7接的板子上B6,7,8,9,12,13,14,15,
RS RW E接板子上A2,3,4
代码如下,是网上复制下来的,我就改了gpio
- #include "stm32f10x.h"
- GPIO_InitTypeDef GPIO_InitStructure; //定义数据命令选择端
- #define RS_CLR GPIO_ResetBits(GPIOA,GPIO_Pin_2) //读写控制端
- #define RS_SET GPIO_SetBits(GPIOA,GPIO_Pin_2)
- #define RW_CLR GPIO_ResetBits(GPIOA,GPIO_Pin_3)
- #define RW_SET GPIO_SetBits(GPIOA,GPIO_Pin_3) //使能端
- #define EN_CLR GPIO_ResetBits(GPIOA,GPIO_Pin_4)
- #define EN_SET GPIO_SetBits(GPIOA,GPIO_Pin_4)
- //延时nus
- void delay_nus(unsigned long n) {
- unsigned long j;
- while (n--) {
- j = 8;
- while (j--)
- ;
- }
- }
- //延时nms
- void DelayMs(unsigned char t) {
- while (t--)
- delay_nus(1100);
- }
- void GPIO_Configuration(void) {
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6
- | GPIO_Pin_7
- | GPIO_Pin_8
- | GPIO_Pin_9
- | GPIO_Pin_12
- | GPIO_Pin_13
- | GPIO_Pin_14
- | GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*I/O 方向 */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; /*I/O 输出速度*/
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*I/O 方向 */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; /*I/O 输出速度*/
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- //判断是否忙
- u8 LCD_check_busy() {
- //u8 ReadValue;
- GPIO_Write(GPIOA, 0xFF);
- RS_CLR;
- delay_nus(1);
- RW_SET;
- delay_nus(1);
- do {
- EN_CLR;
- delay_nus(200);
- EN_SET;
- delay_nus(200);
- } while (GPIOA->IDR & 0X80);
- return (u8) 0;
- }
- //命令初始化
- void LCD_initwrite_com(unsigned char com) {
- //while(LCD_check_busy()); //忙则等待
- EN_CLR;
- delay_nus(1);
- RS_CLR;
- delay_nus(1);
- RW_CLR;
- delay_nus(10);
- GPIO_Write(GPIOA, com);
- delay_nus(300);
- EN_SET;
- delay_nus(300);
- EN_CLR;
- delay_nus(300);
- }
- //写命令
- void LCD_write_com(unsigned char com) {
- //while(LCD_check_busy()); //忙则等待
- EN_CLR;
- delay_nus(1);
- RS_CLR;
- delay_nus(1);
- RW_CLR;
- delay_nus(1);
- GPIO_Write(GPIOA, com);
- delay_nus(500);
- EN_SET;
- DelayMs(1);
- EN_CLR;
- delay_nus(100);
- }
- //写入数据
- void LCD_write_data(unsigned char Data) {
- //while(LCD_check_busy()); //忙则等待
- EN_CLR;
- delay_nus(1);
- RS_SET;
- delay_nus(1);
- RW_CLR;
- delay_nus(1);
- GPIO_Write(GPIOB, Data);
- delay_nus(500);
- EN_SET;
- DelayMs(1);
- EN_CLR;
- delay_nus(100);
- }
- //清屏
- void LCD_Clear(void) {
- LCD_write_com(0x01);
- DelayMs(5);
- }
- // 写入字符串函数
- void LCD_write_string(unsigned char x, unsigned char y, unsigned char *s) {
- if (y == 0) {
- LCD_write_com(0x80 + x);
- } else {
- LCD_write_com(0xc0 + x);
- }
- while (*s) {
- LCD_write_data(*s);
- s++;
- delay_nus(500);
- }
- }
- //写入字符函数
- void LCD_write_char(unsigned char x, unsigned char y, unsigned char data) {
- if (y == 0) {
- LCD_write_com(0x80 + x);
- } else {
- LCD_write_com(0xc0 + x);
- }
- LCD_write_data(data);
- delay_nus(500);
- }
- void LCD_INIT(void) {
- DelayMs(15);
- LCD_write_com(0x38); //显示模式
- DelayMs(5);
- LCD_write_com(0x38);
- DelayMs(5);
- LCD_write_com(0x38);
- DelayMs(5);
- LCD_write_com(0x38);
- DelayMs(5);
- LCD_write_com(0x08); //显示关闭
- DelayMs(5);
- LCD_write_com(0x01); //显示清屏
- DelayMs(6);
- LCD_write_com(0x06); //显示光标移动设置
- DelayMs(5);
- LCD_write_com(0x0c); //显示打开及光标设置
- DelayMs(5);
- }
- int main() {
- GPIO_Configuration();
- LCD_INIT();
- while (1) {
- LCD_write_char(2, 0, '0');
- LCD_write_char(3, 0, 'k');
- LCD_write_string(1, 1, "welcome to 515");
- }
- }
复制代码
|
|