搜索
bottom↓
回复: 24

参考了很多其他atmega16+lcd1602,但是自己还是调不出来,请...

[复制链接]

出0入0汤圆

发表于 2012-10-13 15:31:21 | 显示全部楼层 |阅读模式
本帖最后由 gdutzl 于 2012-10-13 19:11 编辑

硬件连接PORTC是lcd1602的数据口,PORTA的PA7 PA6 PA5分别是lcd1602的RS RW EN ,使用atmega16内部1mhz
调了很久为什么还是不行?显示如图
  1. #include <iom16v.h>
  2. #include <macros.h>
  3. #define RS 7
  4. #define RW 6
  5. #define EN 5
  6. #define RS_CLR        PORTA&=~(1 << RS)
  7. #define RS_SET        PORTA|= (1 << RS)

  8. #define RW_CLR        PORTA&=~(1 << RW)
  9. #define RW_SET        PORTA|= (1 << RW)

  10. #define EN_CLR        PORTA&=~(1 << EN)
  11. #define EN_SET        PORTA|= (1 << EN)
  12. typedef unsigned char uchar;
  13. typedef unsigned int uint;
  14. void delayus(uint us)
  15. {
  16.   uint i;
  17.   for(i=0;i<us;i++);
  18. }
  19. void delayms(uint ms)
  20. {
  21.   uint i,m;
  22.   for(i=0;i<ms;i++)
  23.     for(m=160;m>0;m--);  
  24. }
  25. void LCD_Write_Com(uchar com)//写指令
  26. {
  27.   RS_CLR;
  28.   RW_CLR;
  29.   EN_SET;  
  30.   PORTC=com;
  31.   delayus(20);
  32.   EN_CLR;
  33. }
  34. void LCD_Write_Data(uchar data)//写数据
  35. {
  36.   RS_SET;
  37.   RW_CLR;
  38.   EN_SET;
  39.   PORTC=data;
  40.   delayus(20);
  41.   EN_CLR;
  42. }
  43. void LCD_clear(void)//清屏
  44. {
  45.   LCD_Write_Com(0x01);
  46.   delayms(5);
  47. }
  48. void LCD_Write_String(uchar x,uchar y,uchar *s)//写字符串
  49. {
  50.   if(y == 0)
  51.   {
  52.     LCD_Write_Com(0x80+x);
  53.   }
  54.   else
  55.   {
  56.     LCD_Write_Com(0xc0+x);
  57.   }
  58.   while (*s)
  59.   {
  60.     LCD_Write_Data(*s);
  61.         s++;
  62.   }
  63. }
  64. void LCD_Init(void)//lcd1602初始化
  65. {
  66.   DDRC = 0xFF;                        /*I/O口方向设置*/   
  67.   DDRA |= (1 << RS) | (1 << RW) | (1 << EN);   
  68.   LCD_Write_Com(0x38);
  69.   delayms(5);
  70.   LCD_Write_Com(0x38);
  71.   delayms(5);
  72.   LCD_Write_Com(0x38);
  73.   delayms(5);
  74.   LCD_Write_Com(0x38);
  75.   LCD_Write_Com(0x08);
  76.   LCD_Write_Com(0x01);
  77.   LCD_Write_Com(0x06);
  78.   delayms(5);
  79.   LCD_Write_Com(0x0c);
  80. }
  81. void port_init(void)//端口初始化
  82. {  
  83.   DDRA=0XFF;
  84.   PORTA=0XFF;
  85.   DDRC=0XFF;
  86.   PORTC=0XFF;  
  87. }
  88. void main(void)
  89. {
  90.   port_init();
  91.   LCD_Init();
  92.   delayms(500);
  93.   LCD_clear();
  94.   while(1)
  95.   {
  96.         LCD_Write_String(1,1,"abcdefgh");
  97.         delayms(500);
  98.        
  99.   }
  100. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-10-13 16:04:44 | 显示全部楼层
自己一个人搞了两个晚上,什么东东都搞不出来,觉得自己很垃圾,求助各位大神

出0入0汤圆

发表于 2012-10-13 16:35:07 | 显示全部楼层
硬件连接PORTA是lcd1602的数据口,
27.void LCD_Write_Com(uchar com)//写指令

28.{

29.  RS_CLR;

30.  RW_CLR;

31.  EN_SET;  

32.  PORTC=com;------------------------///////////////////xxxxxxxxxxxxxxxxxx

33.  delayus(20);

34.  EN_CLR;

35.}

36.void LCD_Write_Data(uchar data)//写数据

37.{

38.  RS_SET;

39.  RW_CLR;

40.  EN_SET;

41.  PORTC=data;-----------------------------------////////////xxxxxxxxxxxxxxx

42.  delayus(20);

43.  EN_CLR;

44.}

主楼你是来考验大伙眼力的?

出0入0汤圆

发表于 2012-10-13 16:56:44 | 显示全部楼层
调一下那个滑动变阻器!!!!!

出0入0汤圆

 楼主| 发表于 2012-10-13 16:57:57 | 显示全部楼层
yklstudent 发表于 2012-10-13 16:35
硬件连接PORTA是lcd1602的数据口,
27.void LCD_Write_Com(uchar com)//写指令

不是,主要是不知道程序哪里出错?

出0入0汤圆

 楼主| 发表于 2012-10-13 16:59:30 | 显示全部楼层
sco518 发表于 2012-10-13 16:56
调一下那个滑动变阻器!!!!!


调过了,图片上的效果是我调到最尽头,对比度最高的

出0入0汤圆

发表于 2012-10-13 17:02:01 | 显示全部楼层
不能调到最高的哥= =。。。  调到最高就全亮了。。。一般就是2.2K左右的电阻就够了

出0入0汤圆

发表于 2012-10-13 17:14:31 | 显示全部楼层
我晕,LZ学过51没啊,竟然调到最亮。。。

出0入0汤圆

发表于 2012-10-13 17:24:53 | 显示全部楼层
估计是VLCD太高

出0入0汤圆

 楼主| 发表于 2012-10-13 17:53:20 | 显示全部楼层
sco518 发表于 2012-10-13 17:02
不能调到最高的哥= =。。。  调到最高就全亮了。。。一般就是2.2K左右的电阻就够了
...

但是在滑动电阻器,我掉了一圈,也是没有显示字符?

出0入0汤圆

 楼主| 发表于 2012-10-13 17:58:20 | 显示全部楼层
RUANJI 发表于 2012-10-13 17:14
我晕,LZ学过51没啊,竟然调到最亮。。。

学过了,用51驱动这个 lcd1602是可以的,但换成atmega16,就搞了很久都不行。用proteus仿真是可以,但是网上说那个不靠谱,要实物实现才行。

出0入0汤圆

 楼主| 发表于 2012-10-13 17:59:49 | 显示全部楼层
调节那个对比度,只是1602的那两行黑格的颜色变化深浅

出0入0汤圆

发表于 2012-10-13 18:19:29 来自手机 | 显示全部楼层
把jtag功能关了试试。

出0入0汤圆

发表于 2012-10-13 18:33:34 | 显示全部楼层
熔丝位   JTAG  仿真功能去掉。

出0入0汤圆

 楼主| 发表于 2012-10-13 18:34:03 | 显示全部楼层
ghbyes 发表于 2012-10-13 18:19
把jtag功能关了试试。

初学avr,请问怎么关了jtag?

出0入0汤圆

发表于 2012-10-13 18:57:11 | 显示全部楼层
先搞清楚硬件电路有没有问题 自己先说的PORTA作为数据口用
但是程序中却用的PORTC口
你这里搞的什么玩意就值得怀疑了

出0入0汤圆

 楼主| 发表于 2012-10-13 19:11:11 | 显示全部楼层
yklstudent 发表于 2012-10-13 18:57
先搞清楚硬件电路有没有问题 自己先说的PORTA作为数据口用
但是程序中却用的PORTC口
你这里搞的什么玩意就 ...

不好意思我打错了,两个调换一下。硬件电路没有问题,在51可以显示

出0入0汤圆

 楼主| 发表于 2012-10-13 19:39:22 | 显示全部楼层
非常感谢sco518网友的提示,我把数据口PORTC换成PORTB,显示出来了,这个jtag对PORTC正常输入输出有影响的吗?jtag是不是仿真用的

出0入0汤圆

发表于 2012-10-13 22:50:39 | 显示全部楼层
gdutzl 发表于 2012-10-13 18:34
初学avr,请问怎么关了jtag?

熔丝位配置的。。

出0入0汤圆

发表于 2012-10-14 10:56:10 | 显示全部楼层
gdutzl 发表于 2012-10-13 19:39
非常感谢sco518网友的提示,我把数据口PORTC换成PORTB,显示出来了,这个jtag对PORTC正常输入输出有影响的 ...

嗯,以前驱动一个19264的显示屏,也是折腾了二三天,后来换端口好了,才知道要关了这个仿真配置(像都是默认打开的),关了这个配置,端口换回来就行了!

出0入0汤圆

 楼主| 发表于 2012-10-14 14:22:04 | 显示全部楼层
ghbyes 发表于 2012-10-13 22:50
熔丝位配置的。。

初学者是不是不建议配置熔丝位,容易锁死芯片

出0入0汤圆

发表于 2012-10-14 21:21:03 | 显示全部楼层
gdutzl 发表于 2012-10-14 14:22
初学者是不是不建议配置熔丝位,容易锁死芯片

主要是时钟源的选择,这个我觉得还是要会的。。。其他的就不要改了。。。

出0入0汤圆

发表于 2012-10-14 23:02:45 | 显示全部楼层
我感觉是熔丝位的配置有问题。

出0入0汤圆

 楼主| 发表于 2012-10-14 23:33:16 | 显示全部楼层
point110 发表于 2012-10-14 23:02
我感觉是熔丝位的配置有问题。

熔丝位我没动过,怕锁了

出0入0汤圆

 楼主| 发表于 2012-10-14 23:34:51 | 显示全部楼层
ghbyes 发表于 2012-10-14 21:21
主要是时钟源的选择,这个我觉得还是要会的。。。其他的就不要改了。。。 ...

默认MHZ的内部晶振能不能满足一般的应用?我想逐渐深入后在试试配置熔丝位
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-12 02:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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