找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

仿真的引脚都对应高低电平闪烁了,屏幕也亮了,但是就是不显示东西,大佬求救!

查看数: 3330 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-12-16 15:27

正文摘要:

#include<reg51.h> #include"LCD1602.h" #include"DS1302.h" #define uchar unsigned char #define uint unsigned int bit key_flag1=0,key_flag2=0; SYSTEMTIME adjusted; uchar sec_add=0,min_a ...

回复

ID:213173 发表于 2019-12-17 10:35
楼主这个程序好像是东拼西凑来的。模块化程序通常是一个模块对应一个.C和一个.H文件。楼主这不按正常套路把两者混在一起。还用了另类数据结构SYSTEMTIME adjusted; Keil编译器无法识别。
ID:235200 发表于 2019-12-17 01:12
adjusted.DateString[i]=T.DateString[i];
adjusted.TimeString[i]=T.TimeString[i];
这两行把从DS1302读出的时分秒年月日转存,但没有把它变为ASCII码,如显示0,要把0变为0x30,显示1要变为0x31,也即所有数字显示均需要加0x30,如果显示字母,也要对应转换为相应ASCII码值
ID:657149 发表于 2019-12-16 20:29
  1. #ifndef LCD_CHAR_1602_2005_4_9
  2. #define LCD_CHAR_1602_2005_4_9
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit lcdrs=P2^0;
  6. sbit lcdrw=P2^1;
  7. sbit lcden=P2^2;

  8. void delay(uint z)
  9. {
  10.    uint x,y;
  11.    for(x=z;x>0;x--)
  12.    for(y=110;y>0;y--);
  13. }

  14. void write_com(uchar com)
  15. {
  16.    lcdrw=0;
  17.    lcden=0;
  18.    P0=com;
  19.    delay(5);
  20.    lcden=1;
  21.    delay(5);
  22.    lcden=0;
  23. }

  24. void write_data(uchar date)
  25. {
  26.    lcdrw=0;
  27.    lcdrs=1;
  28.    P0=date;
  29.    delay(5);
  30.    lcden=1;
  31.    delay(5);
  32.    lcden=0;
  33. }
  34. void init1602()
  35. {
  36.   lcdrw=0;
  37.   lcden=0;
  38.   write_com(0x3c);
  39.   write_com(0x0c);
  40.   write_com(0x06);
  41.   write_com(0x01);
  42.   write_com(0x80);
  43. }

  44. void write_string(uchar *pp,uint n)
  45. {
  46.    int i;
  47.    for(i=0;i<n;i++)
  48.    write_data(pp[i]);
  49. }

  50. #endif
复制代码
ID:657149 发表于 2019-12-16 20:28
我马上把1602的头文件贴出来,大佬可以帮我看看吗
ID:657149 发表于 2019-12-16 20:28
csmyldl 发表于 2019-12-16 17:42
不显示的关键在write_string这个函数是否符合1602的时序,因程序未贴出,难以判断问题所在处

这个是1602的头文件函数可以帮我看看吗
ID:657149 发表于 2019-12-16 20:27
csmyldl 发表于 2019-12-16 17:42
不显示的关键在write_string这个函数是否符合1602的时序,因程序未贴出,难以判断问题所在处
  1. #ifndef LCD_CHAR_1602_2005_4_9
  2. #define LCD_CHAR_1602_2005_4_9
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit lcdrs=P2^0;
  6. sbit lcdrw=P2^1;
  7. sbit lcden=P2^2;

  8. void delay(uint z)
  9. {
  10.    uint x,y;
  11.    for(x=z;x>0;x--)
  12.    for(y=110;y>0;y--);
  13. }

  14. void write_com(uchar com)
  15. {
  16.    lcdrw=0;
  17.    lcden=0;
  18.    P0=com;
  19.    delay(5);
  20.    lcden=1;
  21.    delay(5);
  22.    lcden=0;
  23. }

  24. void write_data(uchar date)
  25. {
  26.    lcdrw=0;
  27.    lcdrs=1;
  28.    P0=date;
  29.    delay(5);
  30.    lcden=1;
  31.    delay(5);
  32.    lcden=0;
  33. }
  34. void init1602()
  35. {
  36.   lcdrw=0;
  37.   lcden=0;
  38.   write_com(0x3c);
  39.   write_com(0x0c);
  40.   write_com(0x06);
  41.   write_com(0x01);
  42.   write_com(0x80);
  43. }

  44. void write_string(uchar *pp,uint n)
  45. {
  46.    int i;
  47.    for(i=0;i<n;i++)
  48.    write_data(pp[i]);
  49. }

  50. #endif
复制代码
ID:235200 发表于 2019-12-16 17:42
不显示的关键在write_string这个函数是否符合1602的时序,因程序未贴出,难以判断问题所在处

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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