|
对于初学者来说,最烦躁的可能就是调试程序,往往小小一个问题,要找个一个小时,甚至几个小时才能解决,这个程序是刚调试完的,整整九个多小时啊,现在看着挺简单的,没调试好前根本不敢肯能调得好.高手别笑,初学者参考
编程环境Atmel Studio 7.0 和Proteus 8仿真,说明:仿真和真实电路是有点区别的,仿真Proteus 8只能用内部晶振,最大8MHz,我的DIY板是16M,所以实际电路总是比仿真的跑快好多
单片机源程序:
- /*
- * LCD1602_AVR.h
- *
- * Created: 2017/3/19 23:07:51
- * Author: lyl
-
- *LCD1602的基本操作时序
- 1,读状态,输入:RS=L RW=H E=H 输出:D0~D7=状态字
- 2,读数据,输入:RS=H RW=H E=H 输出:D0~D7=数据
-
- 2,写指令,输入:RS=L RW=L D0~D7=指令码 E=高脉冲 输出:无
- 3,写数据,输入:RS=H RW=L D0~D7=数据 E=高脉冲 输出:无
- */
- #define F_CPU 8000000UL
- #include <avr/io.h> //io端口寄存器配置文件,必须包含
- #include <util/delay.h> //GCC中的延时函数头文件
- #define uchar unsigned char
- #define uint unsigned int
- #ifndef LCD1602_AVR_H_
- #define LCD1602_AVR_H_
- #define DataPort PORTC
- #define DataPort_DDR DDRC
- #define DataPort_PIN PINC
- #define CtrPort PORTB
- #define CtrPort_DDR DDRB
- #define CtrPort_PIN PINB
- #define RS 0
- #define RW 1
- #define EN 2
- #define LCD1602_SetRS() (CtrPort |= (1<<RS))
- #define LCD1602_ClrRS() (CtrPort &= ~(1<<RS))
- #define LCD1602_SetRW() (CtrPort |= (1<<RW))
- #define LCD1602_ClrRW() (CtrPort &= ~(1<<RW))
- #define LCD1602_SetEN() (CtrPort |= (1<<EN))
- #define LCD1602_ClrEN() (CtrPort &= ~(1<<EN))
- void LCD1602_PortInit(void); //端口初始化
- void LCD1602_CheckBusy(void); //LCD1602忙信号检测
- void LCD1602_Init(void); //LCD1602初始化
- void LCD1602_WriteData(uchar ucData);//在液晶上写数据或者命令,0为命令,1为数据
- void LCD1602_WriteCmd(uchar cmd);
- void LCD1602_CursorPosition(uchar x,uchar y);//将液晶的坐标移动到指定的位置
- void LCD1602_WriteChar(uchar x,uchar y,uchar ucData);//在指定的位置上显示一个字符串;
- void LCD1602_WriteString(uchar x,uchar y,uchar *Str);//在液晶上显示字符串
- #endif
复制代码
完整代码和仿真文件下载:
Atmega32A驱动LCD1602显示屏.7z
(66.72 KB, 下载次数: 32)
|
评分
-
查看全部评分
|