单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1790|回复: 4
收起左侧

ATMEGA128的1602LCD显示驱动程序和课件下载

[复制链接]
springzhiqiang 发表于 2017-5-9 15:27 | 显示全部楼层 |阅读模式
本实验开发板的电源选择5V。
0.png
0.png

单片机源程序:
  1. //ATMEGA128的1602型LCD显示驱动程序
  2. //编译环境 ICCAVR 7.16A
  3. //系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms
  4. //忠兴电子元件店编辑
  5. //日期:2010.01.14

  6. //***********************************************************************
  7. //                        包含文件
  8. //***********************************************************************

  9. #include <string.h>
  10. #include <stdio.h>
  11. #include <delay.h>
  12. #include <iom128v.h>

  13. #define uchar unsigned char
  14. #define uint  unsigned int

  15. #define RS_CLR        PORTF &= ~(1 << PF1)                 //RS置低
  16. #define RS_SET        PORTF |= (1 << PF1)                  //RS置高

  17. #define RW_CLR        PORTF &= ~(1 << PF2)                 //RW置低
  18. #define RW_SET        PORTF |= (1 << PF2)                  //RW置高

  19. #define EN_CLR        PORTF &= ~(1 << PF3)                 //E置低
  20. #define EN_SET        PORTF |= (1 << PF3)                  //E置高

  21. #define Data_IO                PORTA                //液晶数据口
  22. #define Data_DDR        DDRA                 //数据口方向寄存器
  23. #define D_LE0                PORTD &= ~(1 << PD4) //数码管段控制位为0,锁存端口数据
  24. #define D_LE1           PORTD |= (1 << PD4)  //数码管段控制位为1,锁存器输出与端口一致
  25. #define W_LE0                PORTD &= ~(1 << PD5) //数码管位控制位为0
  26. #define W_LE1           PORTD |= (1 << PD5)  //数码管位控制位为1

  27. //*************************************************************************
  28. //                        初始化子程序
  29. //*************************************************************************
  30. void system_init()
  31. {

  32.         Data_IO = 0xFF;                                        //电平设置
  33.         Data_DDR = 0xFF;                                        //方向输出
  34.         PORTF = 0xFF;                       //电平设置
  35.         DDRF = 0xFF;                        //方向输出
  36.     PORTD=0xFF;
  37.         DDRD=0xFF;
  38.         D_LE1;                             //关掉数码管,以免显示乱码                  
  39.     W_LE1;                     
  40.     Data_IO=0xFF;                      //关数码管            
  41.     W_LE0;
  42. }

  43. //***********************************************************************
  44. //        显示屏命令写入函数
  45. //***********************************************************************


  46. void LCD_write_com(unsigned char com)
  47. {      
  48.         RS_CLR;
  49.         RW_CLR;
  50.         EN_SET;
  51.         Data_IO = com;
  52.         delay_nms(5);
  53.         EN_CLR;
  54. }
  55. //***********************************************************************
  56. //        显示屏数据写入函数
  57. //***********************************************************************

  58. void LCD_write_data(unsigned char data)
  59. {
  60.         RS_SET;
  61.         RW_CLR;
  62.         EN_SET;
  63.         Data_IO = data;
  64.         delay_nms(5);
  65.         EN_CLR;
  66. }
  67. //***********************************************************************
  68. //        显示屏清空显示
  69. //***********************************************************************

  70. void LCD_clear(void)
  71. {
  72.         LCD_write_com(0x01);
  73.         delay_nms(5);
  74. }
  75. //***********************************************************************
  76. //        显示屏字符串写入函数
  77. //***********************************************************************

  78. void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
  79. {
  80.       
  81.     if (y == 0)
  82.     {
  83.             LCD_write_com(0x80 + x);
  84.     }
  85.     else
  86.     {
  87.             LCD_write_com(0xC0 + x);
  88.     }

  89.     while (*s)
  90.     {
  91.             LCD_write_data( *s);
  92.             s ++;
  93.     }
  94. }
  95. //***********************************************************************
  96. //        显示屏单字符写入函数
  97. //***********************************************************************

  98. void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)
  99. {
  100.       
  101.     if (y == 0)
  102.     {
  103.             LCD_write_com(0x80 + x);
  104.     }
  105.     else
  106.     {
  107.             LCD_write_com(0xC0 + x);
  108.     }

  109.     LCD_write_data( data);  
  110. }
  111. //***********************************************************************
  112. //        显示屏初始化函数
  113. //***********************************************************************

  114. void LCD_init(void)
  115. {
  116.         DDRA = 0xFF;                                        //I/O口方向设置
  117.         DDRA |= (1 << PA5) | (1 << PA6) | (1 << PA7);
  118.         LCD_write_com(0x38);                                //显示模式设置
  119.         delay_nms(5);
  120.         LCD_write_com(0x08);                                //显示关闭
  121.         delay_nms(5);
  122.     LCD_write_com(0x01);                                //显示清屏
  123.         delay_nms(5);
  124.     LCD_write_com(0x06);                                //显示光标移动设置
  125.         delay_nms(5);
  126.         LCD_write_com(0x0C);                                //显示开及光标设置
  127.     delay_nms(5);
  128. }

  129. //*************************************************************************
  130. //                        主程序
  131. //*************************************************************************
  132. void main(void)
  133. {

  134.         unsigned char i;
  135.         unsigned char *p;
  136.         system_init();                                //系统初始化,设置IO口属性
  137.         delay_nms(100);                                //延时100ms
  138.         LCD_init();                                   //液晶参数初始化设置

  139. while (1)
  140.    {
  141.                 i = 1;
  142.                 p = "zhongxingdianzi";                     //字符串输出显示



  143. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

下载:
9.1602液晶显示实验.zip (83.35 KB, 下载次数: 23)
回复

使用道具 举报

无效楼层,该帖已经被删除
AVRZHENDENAN 发表于 2018-5-8 11:49 | 显示全部楼层
您好,附件里面并没有完全的代码啊  我需要全部代码 请问可以发给我吗
回复

使用道具 举报

AVRZHENDENAN 发表于 2018-5-8 11:57 | 显示全部楼层
你好,附件里只有部分代码 请问可以分享一下全部代码吗  
回复

使用道具 举报

zkele 发表于 2018-5-17 07:22 | 显示全部楼层
AVRZHENDENAN 发表于 2018-5-8 11:57
你好,附件里只有部分代码 请问可以分享一下全部代码吗

来吧,我上传一份原版全部源代码的给你.

1602.rar

23.19 KB, 下载次数: 3, 下载积分: 黑币 -5

回复

使用道具 举报

〢♂解★读♀ 发表于 2018-7-19 15:53 | 显示全部楼层
zkele 发表于 2018-5-17 07:22
来吧,我上传一份原版全部源代码的给你.

这不是一样的吗????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

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