找回密码
 立即注册

QQ登录

只需一步,快速开始

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

在线等请问各位大佬这个单片机程序出错了,怎么修改?谢谢

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
sbit kgnxz=P3^0; //功能选择键,按一次设定时间,按两次设定闹钟时间,按三次又显示时间表  
sbit ksec=P3^1;//调整秒
sbit kmin=P3^2;//调整分
sbit khour=P3^3;//调整时
sbit kzh=P3^4;//24与12小时制转换
  unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0,flag=0,//flag是按键的计数
               secshi1=0,secge1=0,minshi1=0,minge1=0,hourshi1=0,hourge1=0;//定义存储时间和闹钟时分秒的个位和十位
unsigned int num=0,sec=0,min=0,hour=0,sec1=30,min1=0,hour1=1, num1=0;//定义时间和闹钟的时分秒
unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段控口
void keyscan();//键盘扫描函数
void display();//时钟显示函数
        /***延时函数****/
void delay(unsigned char z)
{unsigned char x,y;
  for(x=z;x>0;x--)
   for(y=255;y>0;y--);
}
/***中断函数****/
void time0() interrupt 1
{num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(num==20)
   {num=0;
    sec++;
    if(sec==60)
     {sec=0;
      min++;
      if(min==60)
        {min=0;
         hour++;
         if(hour==24)
           {hour=0;
            }
         }
      }
  display(); }
}
/******时钟显示函数******/
void display()
{
secge=sec%10;
secshi=sec/10;
minge=min%10;
minshi=min/10;
hourge=hour%10;
hourshi=hour/10;
P2=0xfe;
P0=table[secge];
delay(5);
P2=0xfd;
P0=table[secshi];
delay(5);
P2=0xfb;
P0=0x40;
delay(5);
P2=0xf7;
P0=table[minge];
delay(5);
P2=0xef;
P0=table[minshi];
delay(5);
P2=0xdf;
P0=0x40;
delay(5);
P2=0xbf;
P0=table[hourge];
delay(5);
P2=0x7f;
P0=table[hourshi];
delay(5);
}
                        /*****键盘扫描*********/
void keyscan()
{if(kgnxz==0)     //功能选择键是否按下
    {  delay(10);//延时消抖            
        if(kgnxz==0)//再次判断键是否按下              
          {flag++;}        //计数,功能选择键按键次数加一         
          while(!kgnxz);} //释放键  
   if(flag==1)//功能选择键
   {if(ksec==0)//秒调整键
   {delay(10);//延时消抖        
    if(ksec==0)//再次判断键是否按下
      {sec++;//秒加加
       if(sec>=60)//如果秒大于60
       sec=0;//秒清零
       }
  while(ksec==0)//释放键
  display();}
  if(kmin==0)
    {delay(10);
     if(kmin==0)
       {min++;
        if(min>=60)
        min=0;
        }
  while(kmin==0)
  display();
     }
  if(khour==0)
    {delay(10);
     if(khour==0)
       {hour++;
        if(hour==24)
        hour=0;
        }
  while(khour==0)
  display();
    }
}
           /*****24转12小时制*********/  
void to12()    keil编程这里有错误
{if(hour>=12)
    {hour=hour-12;}
  if(hour1>=12)
    {hour1=hour1-12;}}
/*****主函数*********/
main()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;TR0=1;
while(1)
{      
keyscan();display();
if(flag==1) {keyscan(); display();}
if(flag==2) {keyscan(); display1();}
if(flag==3)  {display();}
if(kzh==0){to12();}
}
}

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

使用道具 举报

沙发
ID:213173 发表于 2019-12-4 17:55 | 只看该作者
问题不在void to12() ,是void keyscan()里面最后少了一个"}"。
回复

使用道具 举报

板凳
ID:235200 发表于 2019-12-4 18:09 | 只看该作者
错在哪里?仿真调试,可跟踪出错误点
回复

使用道具 举报

地板
ID:643444 发表于 2019-12-4 19:36 来自手机 | 只看该作者
如图Keil编程错误提示

2019-12-04_19.35.10.jpg (1.97 MB, 下载次数: 22)

2019-12-04_19.35.10.jpg
回复

使用道具 举报

5#
ID:155507 发表于 2019-12-4 23:15 | 只看该作者
给你改了,对比一下就知道哪里错了。

  1. /*
  2. 在线等请问各位大佬这个单片机程序出错了,怎么修改?谢谢
  3. 问题不在void to12() ,是void keyscan()里面最后少了一个"}"。

  4. */

  5. #include <reg52.h>
  6. #include <intrins.h>
  7. #include <absacc.h>
  8. sbit kgnxz=P3^0;  //功能选择键,按一次设定时间,按两次设定闹钟时间,按三次又显示时间表  
  9. sbit ksec=P3^1;   //调整秒
  10. sbit kmin=P3^2;   //调整分
  11. sbit khour=P3^3;  //调整时
  12. sbit kzh=P3^4;    //24与12小时制转换
  13. unsigned char secshi=0,secge=0,minshi=0,minge=0,hourshi=0,hourge=0,flag=0; //flag是按键的计数
  14. unsigned char secshi1=0,secge1=0,minshi1=0,minge1=0,hourshi1=0,hourge1=0;//定义存储时间和闹钟时分秒的个位和十位
  15. unsigned int num=0,sec=0,min=0,hour=0,sec1=30,min1=0,hour1=1, num1=0;//定义时间和闹钟的时分秒
  16. unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段控口
  17. void keyscan();//键盘扫描函数
  18. void display();//时钟显示函数
  19. /***延时函数****/
  20. void delay(unsigned char z)
  21. {
  22.         unsigned char x,y;
  23.         for(x=z;x>0;x--)
  24.            for(y=255;y>0;y--);
  25. }
  26. /***中断函数****/
  27. void time0() interrupt 1
  28. {
  29.         num++;
  30.         TH0=(65536-50000)/256;
  31.         TL0=(65536-50000)%256;
  32.         if(num==20)
  33.         {
  34.                 num=0;
  35.                 sec++;
  36.                 if(sec==60)
  37.                 {
  38.                         sec=0;
  39.                         min++;
  40.                         if(min==60)
  41.                         {
  42.                                 min=0;
  43.                                 hour++;
  44.                                 if(hour==24)
  45.                                 {
  46.                                         hour=0;
  47.                                 }
  48.                         }
  49.                 }
  50.                 display(); }
  51. }
  52. /******时钟显示函数******/
  53. void display()
  54. {
  55.         secge=sec%10;
  56.         secshi=sec/10;
  57.         minge=min%10;
  58.         minshi=min/10;
  59.         hourge=hour%10;
  60.         hourshi=hour/10;
  61.         P2=0xfe;
  62.         P0=table[secge];
  63.         delay(5);
  64.         P2=0xfd;
  65.         P0=table[secshi];
  66.         delay(5);
  67.         P2=0xfb;
  68.         P0=0x40;
  69.         delay(5);
  70.         P2=0xf7;
  71.         P0=table[minge];
  72.         delay(5);
  73.         P2=0xef;
  74.         P0=table[minshi];
  75.         delay(5);
  76.         P2=0xdf;
  77.         P0=0x40;
  78.         delay(5);
  79.         P2=0xbf;
  80.         P0=table[hourge];
  81.         delay(5);
  82.         P2=0x7f;
  83.         P0=table[hourshi];
  84.         delay(5);
  85. }
  86. /*****键盘扫描*********/
  87. void keyscan()
  88. {
  89.         if(kgnxz==0)     //功能选择键是否按下
  90.         {
  91.                 delay(10);//延时消抖            
  92.                 if(kgnxz==0)//再次判断键是否按下              
  93.                 { flag++; }        //计数,功能选择键按键次数加一         
  94.                 while(!kgnxz); //释放键
  95.         }               
  96.         if(flag==1)//功能选择键
  97.         {
  98.                 if(ksec==0)//秒调整键
  99.                 {
  100.                         delay(10);//延时消抖        
  101.                         if(ksec==0)//再次判断键是否按下
  102.                         {
  103.                                 sec++;//秒加加
  104.                                 if(sec>=60)//如果秒大于60
  105.                                    sec=0;//秒清零
  106.                         }
  107.                         while(ksec==0)//释放键
  108.                         display();}
  109.                 if(kmin==0)
  110.                 {
  111.                         delay(10);
  112.                         if(kmin==0)
  113.                         {
  114.                                 min++;
  115.                                 if(min>=60)
  116.                                 min=0;
  117.                         }
  118.                         while(kmin==0)
  119.                         display();
  120.                 }
  121.                 if(khour==0)
  122.                 {
  123.                         delay(10);
  124.                         if(khour==0)
  125.                         {
  126.                                 hour++;
  127.                                 if(hour==24)
  128.                                 hour=0;
  129.                         }
  130.                         while(khour==0)
  131.                         display();
  132.                 }
  133.         }
  134. } //<-------------- 错了 少了一个
  135. /*****24转12小时制*********/  
  136. void to12()   // keil编程这里有错误
  137. {
  138.         if(hour>=12)
  139.         {hour=hour-12;}
  140.         if(hour1>=12)
  141.         {hour1=hour1-12;}
  142. }
  143. /*****主函数*********/
  144. main()
  145. {
  146.         TMOD=0x01;
  147.         TH0=(65536-50000)/256;
  148.         TL0=(65536-50000)%256;
  149.         EA=1; ET0=1; TR0=1;
  150.         while(1)
  151.         {      
  152.                 keyscan();display();
  153.                 if(flag==1) {keyscan(); display();}
  154.                 if(flag==2) {keyscan(); display1();}
  155.                 if(flag==3)  {display();}
  156.                 if(kzh==0)  {to12();}
  157.         }
  158. }



复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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