单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1821|回复: 0
打印 上一主题 下一主题
收起左侧

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, 下载次数: 15)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表