帮忙看下设计的时钟程序有什么错误,总是有警告,在1602液晶上无法显示

2019-03-24 18:07发布

  1. /*
  2. ***********************************
  3. *                                                                 **
  4. *  基于STC89c52与1602液晶的时钟         **
  5. *                                                                 **
  6. ***********************************       
  7. **/       
  8.        
  9. #include<reg52.h>
  10. #define uchar unsigned char
  11. #define uint unsigned int
  12. sbit dula=P2^6;                           //定义U1锁存端
  13. sbit wela=P2^7;                           //定义U2锁存端
  14. sbit rs=P3^5;                       //定义1602液晶RS端
  15. sbit lcden=P3^4;                   //定义1602液晶LCDEN端
  16. sbit beep=P2^3;                           //定义蜂鸣器端
  17. sbit rd=P3^7;
  18. sbit s1=P3^0;                           //定义功能选择键-功能键
  19. sbit s2=P3^1;                           //定义功能选择键-增大键
  20. sbit s3=P3^2;                           //定义功能选择键-减小键
  21. uchar code table[]="  2007-7-30 MON";
  22. uchar code table1[]="    00:00:00";
  23. uchar count,s1num;
  24. char shi,fen,miao;

  25. void delay(uint z);
  26. void _beep();
  27. void write_cmd(uchar cmd);
  28. void write_date(uchar date);
  29. void write_sfm(uchar add,uchar date);
  30. void init();
  31. void keyscan();               

  32. /**********延时函数***************/
  33. void delay(uint z)
  34. {
  35.   uint x,y;
  36.   for(x=z;x>0;x--)
  37.    for(y=110;y>0;y--);
  38. }

  39. /***********蜂鸣器发声函数**********/
  40. void _beep()
  41. {
  42.   beep=0;
  43.   delay(100);
  44.   beep=1;
  45. }

  46. /***********液晶写命令函数**********/
  47. void write_cmd(uchar cmd)
  48. {
  49.   rs=0;   //数据/命令选择端
  50.   lcden=0;
  51.   P0=cmd;         //将命令送达总线
  52.   delay(5);  //延时以待数据稳定
  53.   lcden=1;         //使能端送高电平
  54.   delay(5);         //延时
  55.   lcden=0;         //使能端置0完成高脉冲
  56. }

  57. /***********液晶写数据函数**********/
  58. void write_date(uchar date)
  59. {
  60.   rs=1;  //数据/命令选择端
  61.   lcden=0;
  62.   P0=date;  //将数据送达总线
  63.   delay(5); //延时以待数据稳定
  64.   lcden=1;  //使能端送高电平
  65.   delay(5); //稍作延时
  66.   lcden=0;  //使能端置0完成高脉冲
  67. }

  68. /**********初始化函数***************/
  69. void init()
  70. {
  71.   uchar num;
  72.   rd=0;    //软件将矩阵键盘第四列置0以便分离独立按键
  73.   dula=0;                //关闭数码管U1,U2锁存端,防止操作液晶造成数码管错误显示
  74.   wela=0;
  75.   lcden=0;
  76.   shi=0;
  77.   fen=0;
  78.   miao=0;
  79.   count=0;
  80.   s1num=0;

  81.   write_cmd(0x38);  //设置液晶16*2显示,5*7点阵,8位数据接口
  82.   write_cmd(0x0c);
  83.   write_cmd(0x06);    //开显示,显示字符后地址指针自动加一,光标自动加一
  84.   write_cmd(0x01);    //显示清屏
  85.   write_cmd(0x80);    //设置初始地址指针
  86.   for(num=0;num<15;num++)        //液晶显示日期
  87.      {
  88.            write_date(table[num]);
  89.            delay(5);
  90.          }
  91.   write_cmd(0x80+0x40);
  92.   for(num=0;num<12;num++)
  93.                 {
  94.                         write_date(table1[num]);
  95.                         delay(5);
  96.                 }  
  97.   TMOD=0x01;
  98.   TH0=(65536-50000)/256;
  99.   TL0=(65536-50000)%256;
  100.   EA=1;
  101.   ET0=1;
  102.   TR0=1;
  103. }

  104. /***********液晶写日期函数**********/
  105. void write_sfm(uchar add,uchar date)
  106. {
  107.   uchar ge,shi;
  108.   ge=date%10;  //分离十位 个位
  109.   shi=date/10;
  110.   write_cmd(0x80+0x40+add);          //设置显示位
  111.   write_date(0x30+shi);     //送去十位
  112.   write_date(0x30+ge);      //送去个位
  113. }


  114. /***************按键扫描函数******************/
  115. void keyscan()
  116. {
  117.   if(s1==0)                //检测按键
  118.     {
  119.           delay(5);     //延时           消抖
  120.           if(s1==0)                //确认按键按下
  121.           {
  122.             s1num++;    //记录功能选择键按下次数
  123.                 while(!s1); //等待按键释放
  124.                 _beep();    //当有按键释放时蜂鸣器发声
  125.                 if(s1num==1)
  126.                 {
  127.                   TR0=0;   //关闭定时器0
  128.                   write_cmd(0x80+0x40+10);  //光标移动到秒的位置
  129.                   write_cmd(0x0f);          //显示光标并闪烁
  130.                 }
  131.                 if(s1num==2)                        //检测功能选择键第二次被按下
  132.                 {
  133.                   write_cmd(0x80+0x40+7);   //光标移动到分钟显示位置
  134.        
  135.                 }
  136.                 if(s1num==3)            //检测功能键第三次按下
  137.                 {
  138.                   write_cmd(0x80+0x40+4);         //光标移动到时钟位置
  139.                
  140.                 }
  141.                 if(s1num==4)                  //检测功能键第四次被按下
  142.                 {
  143.                   s1num=0;        //记录按键数清零
  144.                   write_cmd(0x0c);         //开显示关闭光标
  145.                   TR0=1;           //开定时器0
  146.                 }
  147.       }
  148.     }
  149.         if(s1num!=0)          //功能键按下后功能选择键起作用
  150.           {
  151.             if(s2==0)          //检测功能选择键-加按下
  152.                 {
  153.                   delay(5);   //延时    消抖
  154.                   if(s2==0)
  155.                   {
  156.                     while(!s2);   //等待按键释放
  157.                         _beep();      //按键释放后蜂鸣器发声
  158.                         switch(s1num)
  159.                         {
  160.                           case 1:
  161.                                  miao++;
  162.                                  if(miao==60)
  163.                                  miao=0;        //秒位满60后清零
  164.                                  write_sfm(10,miao);            //调节后  液晶写数据
  165.                                  write_cmd(0x80+0x40+10);  //地址指针返回原位置
  166.                             
  167.                                  break;
  168.                           case 2:
  169.                                  fen++;
  170.                                          if(fen==60)
  171.                                          fen=0;                   //分钟位满后清零
  172.                                          write_sfm(7,fen);   //调节后  液晶写数据
  173.                                          write_cmd(0x80+0x40+7);   //地址指针返回原位置
  174.                                
  175.                                             break;
  176.                           case 3:
  177.                                  shi++;
  178.                                          if(shi==24)
  179.                                          shi=0;            //时钟满后清零
  180.                                          write_sfm(4,shi); //调节后  液晶写数据
  181.                                          write_cmd(0x80+0x40+4);  //地址指针返回原位置
  182.                        
  183.                                          break;
  184.                           default: break;
  185.                         }
  186.                   }
  187.                   if(s3==0)
  188.                   {
  189.                           delay(5);   //延时  消抖
  190.                         if(s3==0)
  191.                         {
  192.                           while(!s3); //等待按键释放
  193.                           _beep();          //案件释放后蜂鸣器发声
  194.                           switch(s1num)
  195.                         {
  196.                           case 1:
  197.                                  miao--;
  198.                                  if(miao==-1)
  199.                                  miao=59;        //秒位清零
  200.                                  write_sfm(10,miao);            //调节后  液晶写数据
  201.                                  write_cmd(0x80+0x40+10);  //地址指针返回原位置
  202.                              
  203.                                  break;
  204.                           case 2:
  205.                                  fen--;
  206.                                          if(fen==-1)
  207.                                          fen=59;                   //分钟清零
  208.                                          write_sfm(7,fen);   //调节后  液晶写数据
  209.                                          write_cmd(0x80+0x40+7);   //地址指针返回原位置
  210.                        
  211.                                             break;
  212.                           case 3:
  213.                                  shi--;
  214.                                          if(shi==-1)
  215.                                          shi=23;            //时钟位清零
  216.                                          write_sfm(4,shi); //调节后  液晶写数据
  217.                                          write_cmd(0x80+0x40+4);  //地址指针返回原位置
  218.                                  break;
  219.                           default: break;
  220.                         }
  221.                         }
  222.                   }
  223.                 }
  224.           }
  225. }


  226. void mian()
  227. {
  228.   init();    //初始化
  229.   while(1)
  230.   {
  231.     keyscan();
  232.   }
  233. }               
  234.        

  235. /***************中断服务函数*****************/
  236. void timer0() interrupt 1
  237. {
  238.   TH0=(65536-50000)/256;     //重装初值
  239.   TL0=(65536-50000)%256;
  240.   count++;
  241.   if(count==18)              //定时器计时满一秒
  242.     {
  243.           count=0;
  244.           miao++;
  245.           if(miao==60)           //定时器计时满一分         
  246.             {
  247.                   miao=0;
  248.                   fen++;
  249.                   if(fen==60)                 //定时器计时满一时
  250.                      {
  251.                            fen=0;
  252.                            shi++;
  253.                            if(shi==24)
  254.                              {
  255.                                    shi=0;
  256.                                  }         write_sfm(4,shi);
  257.                          }
  258.                                    write_sfm(7,fen);
  259.                 
  260.                 }
  261.                    write_sfm(10,miao);
  262.             
  263.         }
  264. }
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ienglgge
1楼-- · 2019-03-24 23:43
警告的具体内容是什么呢,贴出来看看啊,这跟显示没什么关系。看看1602的资料吧
无氧旅途
2楼-- · 2019-03-25 04:50
 精彩回答 2  元偷偷看……
无氧旅途
3楼-- · 2019-03-25 04:53
ienglgge 发表于 2015-2-3 20:48
警告的具体内容是什么呢,贴出来看看啊,这跟显示没什么关系。看看1602的资料吧



解决了哈,还是谢谢喽(在写其他程序时候意识到错误了)

一周热门 更多>