找回密码
 立即注册

QQ登录

只需一步,快速开始

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

keil编译错误,有大佬可以帮我改一下程序吗?

[复制链接]
跳转到指定楼层
楼主
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. unsigned int cnt_num;
  5. sbit rs=P2^0;               
  6. sbit rw=P2^1;
  7. sbit ep=P2^2;
  8. sbit led=P2^5;
  9. sbit k1=P3^0;
  10. sbit k2=P3^1;
  11. sbit k3=P3^2;
  12. sbit k4=P3^3;
  13. sbit bz=P2^3;
  14. sbit power=P2^4;
  15. uchar shi,fen,miao,a,b,c,d,e,f,teep,ling;
  16. uchar code table[]={"0123456789:"};
  17. void delay(uchar z)                        //延时函数
  18. {
  19.         uchar x,y;
  20.         for(x=10;x>0;x--)
  21.         for(y=z;y>0;y--);
  22. }
  23. lcd_bz()
  24. {                                                        // 测试LCD忙碌状态
  25.         uint result;
  26.         rs = 0;
  27.         rw = 1;
  28.         ep = 1;
  29.         delay(1);
  30.         result = P0 & 0x80;
  31.         ep = 0;
  32.         return result;      
  33. }      
  34. void lcd_cmd(uchar cmd)
  35. {                                                        // 写入指令数据到LCD
  36.         while(lcd_bz());
  37.         rs = 0;
  38.         rw = 0;
  39.         ep = 0;
  40.         delay(1);
  41.         P0 = cmd;
  42.         delay(1);
  43.         ep = 1;
  44.         delay(1);
  45.         ep = 0;
  46. }
  47. void lcd_dat(uchar dat)      
  48. {                                                        //写入字符显示数据到LCD
  49.         while(lcd_bz());
  50.         rs = 1;
  51.         rw = 0;
  52.         ep = 0;
  53.         P0 = dat;
  54.         delay(1);
  55.         ep = 1;
  56.         delay(1);
  57.         ep = 0;      
  58. }
  59. void disp_time(uchar x,uchar y,uchar h,uchar m,uchar s)
  60. {
  61.    if(0 == y) x |= 0x80;        //当要显示第一行时地址码+0x80;
  62.     else x |= 0xC0;             //在第二行显示是地址码+0xC0;
  63.     lcd_cmd(x);               //发送地址码   
  64.         lcd_dat(table[h/10]);        //小时
  65.         lcd_dat(table[h%10]);
  66.         lcd_dat(table[10]);
  67.     lcd_dat(table[m/10]);   //分
  68.         lcd_dat(table[m%10]);
  69.         lcd_dat(table[10]);
  70.     lcd_dat(table[s/10]);   //秒
  71.         lcd_dat(table[s%10]);  
  72. }
  73. void lcd_init()
  74. {                                                        //LCD初始化设定
  75.         lcd_cmd(0x38);                        //
  76.         delay(1);
  77.         lcd_cmd(0x0c);                        //
  78.         delay(1);
  79.         lcd_cmd(0x06);                        //
  80.         delay(1);
  81.         lcd_cmd(0x01);                        //清除LCD的显示内容
  82.         delay(1);
  83.         while(1)
  84.                 if(teep==0)                         //每秒变化一次
  85.                 {
  86.                         disp_time(6,1,shi,fen,miao);
  87.                                    }
  88.                 if(miao==60)
  89.                 {
  90.                 miao=0;
  91.                 fen++;
  92.                         if(fen==60)
  93.                         {
  94.                                 fen=0;
  95.                                 shi++;
  96.                                 if(shi==24)
  97.                                 {
  98.                                         shi=0;
  99.                                 }
  100.                         }
  101.                 }
  102.                 if(k1==0)                         //设置现在时间
  103.                 {
  104.                         EA=0;
  105.                         lcd_cmd(0x01);   //清屏
  106.                         disp_later(0,0,"K2:H K3:M K4:O",14);
  107.                         disp_later(0,1,"TIME:",5);                       
  108.                         disp_time(6,1,shi,fen,miao);
  109.                         while(1)
  110.                         {
  111.                                 while(k2==0)
  112.                                 {
  113.                                         delay(1);
  114.                                         if(k2==1)
  115.                                         {
  116.                                                 shi++;
  117.                                                 if(shi==24) shi=0;
  118.                                                 disp_time(6,1,shi,fen,miao);
  119.                                         }
  120.                                 }
  121.                                 while(k3==0)
  122.                                 {
  123.                                         delay(1);
  124.                                         if(k3==1)
  125.                                         {
  126.                                                 fen++;
  127.                                                 if(fen==60)        fen=0;
  128.                                                 disp_time(6,1,shi,fen,miao);
  129.                                         }
  130.                                 }
  131.                 if(k2==0)
  132.                 {      
  133.                         lcd_cmd(0x01);         
  134.                         disp_later(0,0,"start:",6); //显示:开始时间
  135.                         disp_time(6,0,a,b,c);
  136.                         disp_later(0,1,"delay:",6);                //显示:持续时间
  137.                         disp_time(6,1,d,e,f);
  138.                         delay(10);
  139.                         while(k2==1)
  140.                         {
  141.                                 while(k1==0)
  142.                                 {
  143.                                         delay(10);
  144.                                         if(k1==1)
  145.                                         {
  146.                                                 a++;
  147.                                                 if(a==24) a=0;
  148.                                                 disp_time(6,0,a,b,c);
  149.                                         }
  150.                                 }
  151.                                 while(k2==0)
  152.                                 {
  153.                                         delay(10);
  154.                                         if(k2==1)
  155.                                         {
  156.                                                 b++;
  157.                                                 if(b==60) b=0;
  158.                                                 disp_time(6,0,a,b,c);
  159.                                         }
  160.                                 }
  161.                                 while(k3==0)
  162.                                 {
  163.                                         delay(10);
  164.                                         if(k3==1)
  165.                                         {
  166.                                                 d=d+1;
  167.                                                 if(d==60)
  168.                                                 {
  169.                                                         d=0;
  170.                                                         c++;
  171.                                                         if(c==24)
  172.                                                         c=0;
  173.                                                 }
  174.                                                 disp_time(6,1,c,d,e);
  175.                                         }
  176.                                 }
  177.                                 if(k4==0)
  178.                                 {
  179.                                         ling=1;
  180.                                         disp_later(0,0,"1-SET 2-AL 3-SAL",16);         
  181.                                         disp_later(0,1,"TIME:",5);
  182.                                         disp_time(6,1,shi,fen,miao);      
  183.                                         break;
  184.                                 }
  185.                         }
  186.                 }
  187.                   if(k3==0)                   //显示闹铃时间
  188.                 {
  189.                         lcd_cmd(0x01);         
  190.                         disp_later(0,0,"start:",6); //显示:开始时间
  191.                         disp_time(6,0,a,b,c);
  192.                         disp_later(0,1,"delay:",6);        //显示:持续时间
  193.                         disp_time(6,1,c,d,e);      
  194.                         delay(10000);      
  195.                         lcd_cmd(0x01);   //清屏
  196.                         disp_later(0,0,"1-SET 2-AL 3-SAL",14);
  197.                         disp_later(0,1,"TIME:",5);                       
  198.                         disp_time(6,1,shi,fen,miao);                              
  199.                 }
  200.                  if(ling==1)
  201.                 {        if(shi==a)
  202.                         {
  203.                                 if(fen==b)
  204.                                 {
  205.                                         power=0;                 //开电源
  206.                                         led=1;
  207.                                         }
  208.                                         }
  209.                         if(shi==a+c)
  210.                         {
  211.                                 if(fen==b+d)
  212.                                 {
  213.                                         power=1;                 //关电源
  214.                                     led=0;
  215.                                         bz =0 ;
  216.                                         delay(1000);
  217.                                         bz =1 ;
  218.                                         lcd_cmd(0x01);   //清屏
  219.                                         disp_later(0,0,"1-SET 2-AL 3-SAL",16);         
  220.                                         disp_later(0,1,"TIME:",5);
  221.                                         disp_time(6,1,shi,fen,miao);
  222.                                         ling=0;
  223.                                 }
  224.                         }
  225.                 }         
  226.         }                                 
  227. }
  228. void timer0() interrupt 1
  229. {
  230.         TH0=(65536-50000)/256;
  231.         TL0=(65536-50000)%256;         
  232.         teep++;      
  233.         led=0;
  234.         if(teep==20)
  235.         {
  236.                 teep=0;
  237.                 miao++;    //秒加一
  238.                 if(miao==60)
  239.                 {
  240.                         miao=0;
  241.                         fen++;
  242.                         if(fen==60)
  243.                         {
  244.                                 fen=0;
  245.                                 shi++;
  246.                                 if(shi==24)
  247.                                 {
  248.                                         shi=0;
  249.                                 }
  250.                         }
  251.                 }           
  252.         }
  253. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:134430 发表于 2019-1-19 07:24 | 只看该作者
main函数呐?
回复

使用道具 举报

板凳
ID:155507 发表于 2019-1-19 08:06 | 只看该作者
给你改了一下试试。
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. unsigned int cnt_num;
  5. sbit rs=P2^0;               
  6. sbit rw=P2^1;
  7. sbit ep=P2^2;
  8. sbit led=P2^5;
  9. sbit k1=P3^0;
  10. sbit k2=P3^1;
  11. sbit k3=P3^2;
  12. sbit k4=P3^3;
  13. sbit bz=P2^3;
  14. sbit power=P2^4;
  15. uchar shi,fen,miao,a,b,c,d,e,f,teep,ling;
  16. uchar code table[]={"0123456789:"};
  17. void disp_later(uchar x,uchar y,uchar *p,uchar n);  //<-------
  18. void delay(uchar z)                        //延时函数
  19. {
  20.         uchar x,y;
  21.         for(x=10;x>0;x--)
  22.         for(y=z;y>0;y--);
  23. }
  24. lcd_bz()
  25. {                                                        // 测试LCD忙碌状态
  26.         uint result;
  27.         rs = 0;
  28.         rw = 1;
  29.         ep = 1;
  30.         delay(1);
  31.         result = P0 & 0x80;
  32.         ep = 0;
  33.         return result;      
  34. }      
  35. void lcd_cmd(uchar cmd)
  36. {                                                        // 写入指令数据到LCD
  37.         while(lcd_bz());
  38.         rs = 0;
  39.         rw = 0;
  40.         ep = 0;
  41.         delay(1);
  42.         P0 = cmd;
  43.         delay(1);
  44.         ep = 1;
  45.         delay(1);
  46.         ep = 0;
  47. }
  48. void lcd_dat(uchar dat)      
  49. {                                                        //写入字符显示数据到LCD
  50.         while(lcd_bz());
  51.         rs = 1;
  52.         rw = 0;
  53.         ep = 0;
  54.         P0 = dat;
  55.         delay(1);
  56.         ep = 1;
  57.         delay(1);
  58.         ep = 0;      
  59. }
  60. void disp_time(uchar x,uchar y,uchar h,uchar m,uchar s)
  61. {
  62.         if(0 == y) x |= 0x80;        //当要显示第一行时地址码+0x80;
  63.         else x |= 0xC0;             //在第二行显示是地址码+0xC0;
  64.         lcd_cmd(x);               //发送地址码   
  65.         lcd_dat(table[h/10]);        //小时
  66.         lcd_dat(table[h%10]);
  67.         lcd_dat(table[10]);
  68.         lcd_dat(table[m/10]);   //分
  69.         lcd_dat(table[m%10]);
  70.         lcd_dat(table[10]);
  71.         lcd_dat(table[s/10]);   //秒
  72.         lcd_dat(table[s%10]);  
  73. }
  74. void lcd_init()
  75. {                                         //LCD初始化设定
  76.         lcd_cmd(0x38);                        //
  77.         delay(1);
  78.         lcd_cmd(0x0c);                        //
  79.         delay(1);
  80.         lcd_cmd(0x06);                        //
  81.         delay(1);
  82.         lcd_cmd(0x01);                        //清除LCD的显示内容
  83.         delay(1);
  84.         while(1)
  85.         {
  86.                 if(teep==0)                         //每秒变化一次
  87.                 {
  88.                         disp_time(6,1,shi,fen,miao);
  89.                 }
  90.                 if(miao==60)
  91.                 {
  92.                         miao=0;
  93.                         fen++;
  94.                         if(fen==60)
  95.                         {
  96.                                 fen=0;
  97.                                 shi++;
  98.                                 if(shi==24)
  99.                                 {
  100.                                         shi=0;
  101.                                 }
  102.                         }
  103.                 }
  104.                 if(k1==0)                         //设置现在时间
  105.                 {
  106.                         EA=0;
  107.                         lcd_cmd(0x01);   //清屏
  108.                         disp_later(0,0,"K2:H K3:M K4:O",14);
  109.                         disp_later(0,1,"TIME:",5);                       
  110.                         disp_time(6,1,shi,fen,miao);
  111.                         while(1)
  112.                         {
  113.                                 while(k2==0)
  114.                                 {
  115.                                         delay(1);
  116.                                         if(k2==1)
  117.                                         {
  118.                                                 shi++;
  119.                                                 if(shi==24) shi=0;
  120.                                                 disp_time(6,1,shi,fen,miao);
  121.                                         }
  122.                                 }
  123.                                 while(k3==0)
  124.                                 {
  125.                                         delay(1);
  126.                                         if(k3==1)
  127.                                         {
  128.                                                 fen++;
  129.                                                 if(fen==60)        fen=0;
  130.                                                 disp_time(6,1,shi,fen,miao);
  131.                                         }
  132.                                 }
  133.                                 if(k2==0)
  134.                                 {      
  135.                                         lcd_cmd(0x01);         
  136.                                         disp_later(0,0,"start:",6); //显示:开始时间
  137.                                         disp_time(6,0,a,b,c);
  138.                                         disp_later(0,1,"delay:",6);                //显示:持续时间
  139.                                         disp_time(6,1,d,e,f);
  140.                                         delay(10);
  141.                                         while(k2==1)
  142.                                         {
  143.                                                 while(k1==0)
  144.                                                 {
  145.                                                         delay(10);
  146.                                                         if(k1==1)
  147.                                                         {
  148.                                                                 a++;
  149.                                                                 if(a==24) a=0;
  150.                                                                 disp_time(6,0,a,b,c);
  151.                                                         }
  152.                                                 }
  153.                                                 while(k2==0)
  154.                                                 {
  155.                                                         delay(10);
  156.                                                         if(k2==1)
  157.                                                         {
  158.                                                                 b++;
  159.                                                                 if(b==60) b=0;
  160.                                                                 disp_time(6,0,a,b,c);
  161.                                                         }
  162.                                                 }
  163.                                                 while(k3==0)
  164.                                                 {
  165.                                                         delay(10);
  166.                                                         if(k3==1)
  167.                                                         {
  168.                                                                 d=d+1;
  169.                                                                 if(d==60)
  170.                                                                 {
  171.                                                                         d=0;
  172.                                                                         c++;
  173.                                                                         if(c==24)
  174.                                                                         c=0;
  175.                                                                 }
  176.                                                                 disp_time(6,1,c,d,e);
  177.                                                         }
  178.                                                 }
  179.                                                 if(k4==0)
  180.                                                 {
  181.                                                         ling=1;
  182.                                                         disp_later(0,0,"1-SET 2-AL 3-SAL",16);         
  183.                                                         disp_later(0,1,"TIME:",5);
  184.                                                         disp_time(6,1,shi,fen,miao);      
  185.                                                         break;
  186.                                                 }
  187.                                         }
  188.                                 }
  189.                                 if(k3==0)                   //显示闹铃时间
  190.                                 {
  191.                                         lcd_cmd(0x01);         
  192.                                         disp_later(0,0,"start:",6); //显示:开始时间
  193.                                         disp_time(6,0,a,b,c);
  194.                                         disp_later(0,1,"delay:",6);        //显示:持续时间
  195.                                         disp_time(6,1,c,d,e);      
  196.                                         delay(10000);      
  197.                                         lcd_cmd(0x01);   //清屏
  198.                                         disp_later(0,0,"1-SET 2-AL 3-SAL",14);
  199.                                         disp_later(0,1,"TIME:",5);                       
  200.                                         disp_time(6,1,shi,fen,miao);                              
  201.                                 }
  202.                                 if(ling==1)
  203.                                 {        if(shi==a)
  204.                                         {
  205.                                                 if(fen==b)
  206.                                                 {
  207.                                                         power=0;                 //开电源
  208.                                                         led=1;
  209.                                                 }
  210.                                         }
  211.                                         if(shi==a+c)
  212.                                         {
  213.                                                 if(fen==b+d)
  214.                                                 {
  215.                                                         power=1;                 //关电源
  216.                                                         led=0;
  217.                                                         bz =0 ;
  218.                                                         delay(1000);
  219.                                                         bz =1 ;
  220.                                                         lcd_cmd(0x01);   //清屏
  221.                                                         disp_later(0,0,"1-SET 2-AL 3-SAL",16);         
  222.                                                         disp_later(0,1,"TIME:",5);
  223.                                                         disp_time(6,1,shi,fen,miao);
  224.                                                         ling=0;
  225.                                                 }
  226.                                         }
  227.                                 }         
  228.                         }                                 
  229.                 }
  230.         } //<-----
  231. } //<-----
  232. void timer0() interrupt 1
  233. {
  234.         TH0=(65536-50000)/256;
  235.         TL0=(65536-50000)%256;         
  236.         teep++;      
  237.         led=0;
  238.         if(teep==20)
  239.         {
  240.                 teep=0;
  241.                 miao++;    //秒加一
  242.                 if(miao==60)
  243.                 {
  244.                         miao=0;
  245.                         fen++;
  246.                         if(fen==60)
  247.                         {
  248.                                 fen=0;
  249.                                 shi++;
  250.                                 if(shi==24)
  251.                                 {
  252.                                         shi=0;
  253.                                 }
  254.                         }
  255.                 }           
  256.         }
  257. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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