找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么添加让液晶显示4行,运行keil4总有一个警告

[复制链接]
跳转到指定楼层
楼主


单片机源程序如下:
#include<AT89X52.h>
unsigned char tab[]="  23:58:48";
unsigned char tab2[]="TIME";
#define lcdp P0
sbit rs=P3^5;
sbit rw=P3^6;
sbit en=P3^7;
sbit led=P1^7;
sbit s1=P1^0;
sbit s2=P1^1;
sbit s3=P1^2;
unsigned char n,count,mu;
char ss=23,ff=58,mm=55;
void delay(unsigned char z)
{
unsigned char i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
  void write_com(unsigned char com)// д???
{
rs=0;
rw=0;
en=0;
lcdp=com;
delay(5);
en=1;
delay(5);
en=0;
}
  void write_date(unsigned char date)// д????
{
rs=1;
rw=0;
en=0;
lcdp=date;
delay(5);
en=1;
delay(5);
en=0;
}
void write_sj(unsigned add,unsigned date)
{
unsigned char shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(shi+0x30);
write_date(ge+0x30);
}
void init() // ?????
{
write_com(0x38); //???? 16x2 ????? 5x7 ???? 8 λ??????
write_com(0x06); // д?????????????????? 1
write_com(0x01); // ??????????????????
write_com(0x0c); // ???????????????
//write_com(0x08);
//write_com(0x0e);// ?????????????
write_com(0x80); // ???λ??
for(n=0;n<10;n++)
{
write_date(tab[n]);
delay(1);
}
write_com(0x80+0x40+3);// ????????
for(n=0;n<16;n++)
{
write_date(tab2[n]);
delay(1);
}
//??????????
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
}
void key()
{
if(s1==0)
{
delay(5);
if(s1==0)
{
mu++;
  while(!s1);
}
if(mu==1)
{
TR0=0;
write_com(0x80+9);
write_com(0x0f);// ??????
}
if(mu==2)
{
write_com(0x80+6);
write_com(0x0f);// ??????
}
if(mu==3)
{
write_com(0x80+3);
write_com(0x0f);// ??????
}
}
if(mu==4)
{
TR0=1;
mu=0;
write_com(0x0c);// ?????
}
if(mu!=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
if(mu==1)
{
mm++;
if(mm==60)
mm=0;
write_sj(8,mm);
write_com(0x80+9);
}
if(mu==2)
{
ff++;
if(ff==60)
ff=0;
write_sj(5,ff);
write_com(0x80+6);
}
if(mu==3)
{
ss++;
led=!led;
if(ss==24)
ss=0;
write_sj(2,ss);
write_com(0x80+3);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
if(mu==1)
{
mm--;
if(mm==-1)
mm=59;
write_sj(8,mm);
write_com(0x80+9);
}
if(mu==2)
{
ff--;
if(ff==-1)
ff=59;
write_sj(5,ff);
write_com(0x80+6);
}
if(mu==3)
{
ss--;
led=!led;
if(ss==-1)
ss=23;
write_sj(2,ss);
write_com(0x80+3);
}
}
}
}
}
void main()
{
init();
while(1)
{
key();
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++; if(count==20)
{
count=0;
mm++;
if(mm==60)
{
mm=0;
ff++;
if(ff==60)
{
ff=0;
ss++;
if(ss==24)
{
ss=0;
}
write_sj(2,ss);
}
write_sj(5,ff);
}
write_sj(8,mm);
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2020-10-31 16:05 | 只看该作者
我给你来个程序试试

  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define DATA P1                                                                             //定义LCM数据总线P0
  5. sbit RS=P3^0;                                                       //寄存器选择位(0指令1数据)
  6. sbit RW=P3^1;                                                       //设置读写位置(0写入1读取)
  7. sbit E=P3^7;                                                        //使能为(0禁止1允许)
  8. sbit BF=P3^3;

  9. uchar line1[]="LCD TEST PROGRAM By ";                                //第一行显示字符
  10. uchar line2[]="Everything is OK! XY";                                
  11. uchar line3[]="aaaaaaaaaaaaaaaabcde";                              
  12. uchar line4[]="bbbbbbbbbbbbbbbcdefg";                                

  13. void Init_LCD(void);                                                 //声明液晶初始化函数
  14. void write_cmd(uchar);                                               
  15. void write_data(uchar);                                             
  16. void check_BF(void);                                                
  17. void delay_1ms(uint);                                                
  18. void set_xy(uchar x,uchar y);                                       
  19. void display(uchar x,uchar y,uchar *s);                                                 //声明显示函数

  20. /*********************1ms延时函数****************************************************************/
  21. void delay_1ms(uint x)
  22. {
  23.         uint i,j;
  24.         for(i=1;i<x;i++)
  25.         for(j=1;j<110;j++);
  26. }
  27. /*********************液晶初始化函数*************************************************************/
  28. void Init_LCD(void)
  29. {
  30.         write_cmd(0x38);                                                         //设置8位格式,2行5X7
  31.         write_cmd(0x08);                                                         //Tune off screen
  32.         write_cmd(0x01);                                                        
  33.         write_cmd(0x06);                                                        
  34.         write_cmd(0x0c);                                                                             
  35. }
  36. /**********************写指令函数******************************************************************/
  37. void write_cmd(uchar com)
  38. {
  39.         check_BF();
  40.         E=0;
  41.         RS=0;
  42.         RW=0;
  43.         DATA=com;
  44.         delay_1ms(2);
  45.         E=1;
  46.         delay_1ms(2);
  47.         E=0;
  48.         RS=1;
  49.         RW=1;
  50. }
  51. /**********************写数据函数*******************************************************************/
  52. void write_data(uchar chardata)
  53. {
  54.         check_BF();
  55.         E=0;
  56.                                 RS=1;
  57.         RW=0;
  58.         DATA=chardata;
  59.         delay_1ms(2);
  60.         E=1;
  61.         delay_1ms(2);
  62.         E=0;
  63.         RS=0;
  64.         RW=1;
  65. }
  66. /**********************判忙函数******************************************************************/
  67. void check_BF(void)
  68. {
  69.        P1=0xff;
  70.        E=0;
  71.        RS=0;
  72.        RW=1;
  73.        E=1;
  74.                          //while((P2&0x80)==0x80);
  75.        E=0;
  76.        RS=1;
  77.        RW=0;        
  78. }
  79. /**********************定义显示位置*******************************************************************/
  80. void set_xy(uchar x,uchar y)
  81. {
  82.         uchar add;
  83.         if(x==0)
  84.                 add=0x80+y;
  85.         else
  86.                 if(x==1)
  87.                         add=0xc0+y;
  88.         else
  89.                 if(x==2)
  90.                         add=0x94+y;
  91.         else
  92.                 if(x==3)
  93.                         add=0xd4+y;
  94.         write_cmd(add);

  95. }
  96. /**********************显示函数***********************************************************************/
  97. void displayL(uchar x,uchar y,uchar *s)
  98. {
  99.         set_xy(x,y);
  100.         while(*s)
  101.         {
  102.                 DATA=*s;
  103.                 write_data(*s);
  104.                 s++;
  105.         }
  106.         
  107. }
  108. /**********************主函数*************************************************************************/
  109. void main()
  110. {
  111.         Init_LCD();
  112.         while(1)
  113.         {
  114.                 displayL(0,0,line1);
  115.                                 delay_1ms(10);
  116.                 displayL(1,0,line2);
  117.                 displayL(2,0,line3);
  118.                 displayL(3,0,line4);
  119.                         
  120.         }
  121. }

复制代码
回复

使用道具 举报

板凳
ID:836924 发表于 2020-11-1 09:23 | 只看该作者
angmall 发表于 2020-10-31 16:05
我给你来个程序试试

液晶点亮没显示,换了接口也是一样
回复

使用道具 举报

地板
ID:836924 发表于 2020-11-1 09:55 | 只看该作者
angmall 发表于 2020-10-31 16:05
我给你来个程序试试

我是想用液晶做一个时钟,显示时间并另外显示3排字
回复

使用道具 举报

5#
ID:839398 发表于 2020-11-5 21:02 来自手机 | 只看该作者
警告一般不用管,实际上也不用管。
回复

使用道具 举报

6#
ID:155507 发表于 2020-11-5 22:49 | 只看该作者
给你改了一下试试



  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define DATA P0                                                 //定义LCM数据总线P0
  5. sbit RS=P3^5;                                                     //寄存器选择位(0指令1数据)
  6. sbit RW=P3^6;                                                       //设置读写位置(0写入1读取)
  7. sbit E=P3^7;                                                        //使能为(0禁止1允许)
  8. sbit BF=P3^3;
  9. sbit s1=P1^0;
  10. sbit s2=P1^1;
  11. sbit s3=P1^2;
  12. sbit led=P1^7;
  13. unsigned char n,count,mu;
  14. unsigned char ss=23,ff=58,mm=55;

  15. unsigned char tab[]="  23:58:48";
  16. unsigned char tab2[]="TIME       ";

  17. uchar line1[]="LCD TEST PROGRAM By ";                                //第一行显示字符
  18. uchar line2[]="Everything is OK! XY";                                
  19. uchar line3[]="aaaaaaaaaaaaaaaabcde";                              
  20. uchar line4[]="bbbbbbbbbbbbbbbcdefg";                                

  21. void Init_LCD(void);                                                 //声明液晶初始化函数
  22. void write_cmd(uchar);                                               
  23. void write_data(uchar);                                             
  24. void check_BF(void);                                                
  25. void delay_1ms(uint);                                                
  26. void set_xy(uchar x,uchar y);                                       
  27. void display(uchar x,uchar y,uchar *s);                                                 //声明显示函数

  28. /*********************1ms延时函数****************************************************************/
  29. void delay_1ms(uint x)
  30. {
  31.         uint i,j;
  32.         for(i=1;i<x;i++)
  33.         for(j=1;j<110;j++);
  34. }
  35. /*********************液晶初始化函数*************************************************************/
  36. void Init_LCD(void)
  37. {
  38.         write_cmd(0x38);                                                         //设置8位格式,2行5X7
  39.         write_cmd(0x08);                                                         //Tune off screen
  40.         write_cmd(0x01);                                                        
  41.         write_cmd(0x06);                                                        
  42.         write_cmd(0x0c);                                                                             
  43. }
  44. /**********************写指令函数******************************************************************/
  45. void write_cmd(uchar com)
  46. {
  47.         check_BF();
  48.         E=0;
  49.         RS=0;
  50.         RW=0;
  51.         DATA=com;
  52.         delay_1ms(2);
  53.         E=1;
  54.         delay_1ms(2);
  55.         E=0;
  56.         RS=1;
  57.         RW=1;
  58. }
  59. /**********************写数据函数*******************************************************************/
  60. void write_data(uchar chardata)
  61. {
  62.         check_BF();
  63.         E=0;
  64.                                 RS=1;
  65.         RW=0;
  66.         DATA=chardata;
  67.         delay_1ms(2);
  68.         E=1;
  69.         delay_1ms(2);
  70.         E=0;
  71.         RS=0;
  72.         RW=1;
  73. }
  74. /**********************判忙函数******************************************************************/
  75. void check_BF(void)
  76. {
  77.        P1=0xff;
  78.        E=0;
  79.        RS=0;
  80.        RW=1;
  81.        E=1;
  82.                          //while((P2&0x80)==0x80);
  83.        E=0;
  84.        RS=1;
  85.        RW=0;        
  86. }
  87. /**********************定义显示位置*******************************************************************/
  88. void set_xy(uchar x,uchar y)
  89. {
  90.         uchar add;
  91.         if(x==0)
  92.                 add=0x80+y;
  93.         else
  94.                 if(x==1)
  95.                         add=0xc0+y;
  96.         else
  97.                 if(x==2)
  98.                         add=0x94+y;
  99.         else
  100.                 if(x==3)
  101.                         add=0xd4+y;
  102.         write_cmd(add);

  103. }
  104. /**********************显示函数***********************************************************************/
  105. void displayL(uchar x,uchar y,uchar *s)
  106. {
  107.         set_xy(x,y);
  108.         while(*s)
  109.         {
  110.                 DATA=*s;
  111.                 write_data(*s);
  112.                 s++;
  113.         }
  114.         
  115. }
  116. void write_sj(unsigned add,unsigned date)
  117. {
  118.         unsigned char shi,ge;
  119.         shi=date/10;
  120.         ge=date%10;
  121.         write_cmd(0x80+add);
  122.         write_data(shi+0x30);
  123.         write_data(ge+0x30);
  124. }

  125. void key()
  126. {
  127.         if(s1==0)
  128.         {
  129.                 delay_1ms(5);
  130.                 if(s1==0)
  131.                 {
  132.                         mu++;
  133.                         while(!s1);
  134.                 }
  135.                 if(mu==1)
  136.                 {
  137.                         TR0=0;
  138.                         write_cmd(0x80+9);
  139.                         write_cmd(0x0f);// ??????
  140.                 }
  141.                 if(mu==2)
  142.                 {
  143.                         write_cmd(0x80+6);
  144.                         write_cmd(0x0f);// ??????
  145.                 }
  146.                 if(mu==3)
  147.                 {
  148.                         write_cmd(0x80+3);
  149.                         write_cmd(0x0f);// ??????
  150.                 }
  151.         }
  152.         if(mu==4)
  153.         {
  154.                 TR0=1;
  155.                 mu=0;
  156.                 write_cmd(0x0c);// ?????
  157.         }
  158.         if(mu!=0)
  159.         {
  160.                 if(s2==0)
  161.                 {
  162.                         delay_1ms(5);
  163.                         if(s2==0)
  164.                         {
  165.                                 while(!s2);
  166.                                 if(mu==1)
  167.                                 {
  168.                                         mm++;
  169.                                         if(mm==60)
  170.                                         mm=0;
  171.                                         write_sj(8,mm);
  172.                                         write_cmd(0x80+9);
  173.                                 }
  174.                                 if(mu==2)
  175.                                 {
  176.                                         ff++;
  177.                                         if(ff==60)
  178.                                         ff=0;
  179.                                         write_sj(5,ff);
  180.                                         write_cmd(0x80+6);
  181.                                 }
  182.                                 if(mu==3)
  183.                                 {
  184.                                         ss++;
  185.                                         led=!led;
  186.                                         if(ss==24)
  187.                                         ss=0;
  188.                                         write_sj(2,ss);
  189.                                         write_cmd(0x80+3);
  190.                                 }
  191.                         }
  192.                 }
  193.                 if(s3==0)
  194.                 {
  195.                         delay_1ms(5);
  196.                         if(s3==0)
  197.                         {
  198.                                 while(!s3);
  199.                                 if(mu==1)
  200.                                 {
  201.                                         mm--;
  202.                                         if(mm==-1)
  203.                                         mm=59;
  204.                                         write_sj(8,mm);
  205.                                         write_cmd(0x80+9);
  206.                                 }
  207.                                 if(mu==2)
  208.                                 {
  209.                                         ff--;
  210.                                         if(ff==-1)
  211.                                         ff=59;
  212.                                         write_sj(5,ff);
  213.                                         write_cmd(0x80+6);
  214.                                 }
  215.                                 if(mu==3)
  216.                                 {
  217.                                         ss--;
  218.                                         led=!led;
  219.                                         if(ss==-1)
  220.                                         ss=23;
  221.                                         write_sj(2,ss);
  222.                                         write_cmd(0x80+3);
  223.                                 }
  224.                         }
  225.                 }
  226.         }
  227. }


  228. /**********************主函数*************************************************************************/
  229. void main()
  230. {
  231.      Init_LCD();
  232.         TH0=(65536-50000)/256;
  233.         TL0=(65536-50000)%256;
  234.         TMOD=0x01;
  235.         EA=1;
  236.         ET0=1;
  237.         TR0=1;
  238.         write_cmd(0x80); // ???λ??
  239.         for(n=0;n<10;n++)
  240.         {
  241.                 write_data(tab[n]);
  242.                 delay_1ms(1);
  243.         }
  244.         write_cmd(0x80+0x40+3);// ????????
  245.         for(n=0;n<16;n++)
  246.         {
  247.                 write_data(tab2[n]);
  248.                 delay_1ms(1);
  249.         }
  250.           displayL(2,0,line3);
  251.           displayL(3,0,line4);
  252.         while(1)
  253.         {
  254.                 //displayL(0,0,line1);
  255.                  //delay_1ms(10);
  256.                 //displayL(1,0,line2);

  257.                           key();      
  258.                         write_sj(2,ss);
  259.                         write_sj(5,ff);
  260.                     write_sj(8,mm);
  261.         }
  262. }


  263. void time0() interrupt 1
  264. {
  265.         TH0=(65536-50000)/256;
  266.         TL0=(65536-50000)%256;
  267.         count++;
  268.    if(count==20)
  269.         {
  270.                 count=0;
  271.                 mm++;
  272.                 if(mm==60)
  273.                 {
  274.                         mm=0;
  275.                         ff++;
  276.                         if(ff==60)
  277.                         {
  278.                                 ff=0;
  279.                                 ss++;
  280.                                 if(ss==24)
  281.                                 {
  282.                                         ss=0;
  283.                                 }

  284.                         }

  285.                 }

  286.         }
  287. }


复制代码
回复

使用道具 举报

7#
ID:836924 发表于 2020-11-16 20:38 | 只看该作者
angmall 发表于 2020-11-5 22:49
给你改了一下试试

谢谢,有用了
回复

使用道具 举报

8#
ID:751181 发表于 2020-11-17 12:57 | 只看该作者
不是有显示模块吗,调用显示函数
回复

使用道具 举报

9#
ID:836924 发表于 2020-12-1 13:22 | 只看该作者
周小小123 发表于 2020-11-17 12:57
不是有显示模块吗,调用显示函数

还要加一个震荡源的,有点麻烦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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