标题: Atmega32A驱动LCD1602显示屏 [打印本页]

作者: qq732357710    时间: 2017-5-5 05:41
标题: Atmega32A驱动LCD1602显示屏
对于初学者来说,最烦躁的可能就是调试程序,往往小小一个问题,要找个一个小时,甚至几个小时才能解决,这个程序是刚调试完的,整整九个多小时啊,现在看着挺简单的,没调试好前根本不敢肯能调得好.高手别笑,初学者参考
编程环境Atmel Studio 7.0 和Proteus 8仿真,说明:仿真和真实电路是有点区别的,仿真Proteus 8只能用内部晶振,最大8MHz,我的DIY板是16M,所以实际电路总是比仿真的跑快好多


单片机源程序:

  1. /*
  2. * LCD1602_AVR.h
  3. *
  4. * Created: 2017/3/19 23:07:51
  5. *  Author: lyl

  6. *LCD1602的基本操作时序
  7.         1,读状态,输入:RS=L        RW=H        E=H                        输出:D0~D7=状态字
  8.         2,读数据,输入:RS=H        RW=H        E=H                                输出:D0~D7=数据
  9.        
  10.         2,写指令,输入:RS=L        RW=L        D0~D7=指令码                E=高脉冲                输出:无
  11.         3,写数据,输入:RS=H        RW=L        D0~D7=数据                E=高脉冲                输出:无
  12. */
  13. #define F_CPU 8000000UL
  14. #include <avr/io.h>        //io端口寄存器配置文件,必须包含
  15. #include <util/delay.h>       //GCC中的延时函数头文件
  16. #define uchar unsigned char
  17. #define uint unsigned int

  18. #ifndef LCD1602_AVR_H_
  19. #define LCD1602_AVR_H_

  20. #define DataPort PORTC
  21. #define DataPort_DDR DDRC
  22. #define DataPort_PIN PINC
  23. #define CtrPort PORTB
  24. #define CtrPort_DDR DDRB
  25. #define CtrPort_PIN PINB

  26. #define RS 0
  27. #define RW 1
  28. #define EN 2

  29. #define LCD1602_SetRS()                (CtrPort |= (1<<RS))
  30. #define LCD1602_ClrRS()                (CtrPort &= ~(1<<RS))
  31. #define LCD1602_SetRW()                (CtrPort |= (1<<RW))
  32. #define LCD1602_ClrRW()                (CtrPort &= ~(1<<RW))
  33. #define LCD1602_SetEN()                (CtrPort |= (1<<EN))
  34. #define LCD1602_ClrEN()                (CtrPort &= ~(1<<EN))

  35. void LCD1602_PortInit(void);        //端口初始化
  36. void LCD1602_CheckBusy(void);        //LCD1602忙信号检测
  37. void LCD1602_Init(void);        //LCD1602初始化
  38. void LCD1602_WriteData(uchar ucData);//在液晶上写数据或者命令,0为命令,1为数据
  39. void LCD1602_WriteCmd(uchar cmd);
  40. void LCD1602_CursorPosition(uchar x,uchar y);//将液晶的坐标移动到指定的位置
  41. void LCD1602_WriteChar(uchar x,uchar y,uchar ucData);//在指定的位置上显示一个字符串;
  42. void LCD1602_WriteString(uchar x,uchar y,uchar *Str);//在液晶上显示字符串





  43. #endif
复制代码


完整代码和仿真文件下载:
Atmega32A驱动LCD1602显示屏.7z (66.72 KB, 下载次数: 32)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1