3146|0

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

keil的编程问题-一条代码换个位置出现意想不到的结果 [复制链接]

~~~~~~~~数字钟出现~~~~~~~~~~~

 

#include<reg52.h>

#define  uchar unsigned char

uchar DspFlag;  //数码管显示模式
uchar DspBit;  //数码管位扫描
uchar KeyFlag;  //按键扫描
uchar sec;
uchar min;
uchar hou;
uchar KeyLongSta=0;
uchar TmCnt;  //定时器计时变量
uchar KeyModeTime=0;
uchar KeyBuf;
uchar const BITAB[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管位选择
uchar DspBuf[6]={0,0,0,0,0,0}; //显示数据的存储单元
uchar const code SEGTAB[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //0~9,-的编码
uchar KeySta=0;
uchar KeyBuf;
uchar KeyLongCnt;
sbit dula=P2^6;
sbit wela=P2^7;

uchar i;
uchar KeyLong();
uchar KeySch();
void NmlCnt();
void KeyDeal();
void DspFun();

void NmlCnt() //计时函数
{
    if(KeyModeTime==0) //控制模式的按键未按,模式0时刻
    {
    if(sec>59)
        {
              sec=0;
              min++;
     if(min>59)
           {
                min=0;
                hou++;
     if(hou>23)
           {
                 hou=0;
           }
            }
        }  
    }
    DspBuf[5]=sec%10; //数组0位存储秒的个位
    DspBuf[4]=sec/10; //数组1位存储秒的十位
    DspBuf[3]=min%10; //数组3位存储分的个位
    DspBuf[2]=min/10; //数组4位存储分的十位
    DspBuf[1]=hou%10; //数组6位存储时的个位
    DspBuf[0]=hou/10; //数组7位存储秒的十位
}

void Init_Timer() //定时器0初始化
{
    TMOD=0x01;
    TH0=(65536-4000)/256;
    TL0=(65536-4000)%256;
    EA=1;
    ET0=1;
    TR0=1;
}

void Timer0_isr() interrupt 1 using 1 //定时器中断子程序
{
     if(TmCnt>=250)  //计时达到1s
 {
  TmCnt=0;
  sec++;
  DspBit=!DspBit;
 }
     else
 {
  TmCnt++;
  if(TmCnt%5==0)
  DspBit=!DspBit;        //数码管扫描
 }
    TH0=(65536-4000)/256;
    TL0=(65536-4000)%256;  
}

main()
{
 Init_Timer();  //定时器初始化
 P0=0xff;
 while(1)
 {
  if(DspBit==1) //数码管扫描
  {
   DspFun();  //数码管显示函数
  }
  NmlCnt();  //正常计时
 }
}

void DspFun()  //显示函数
{
 uchar temp;
 temp=temp+1;  //问题就在这里!!!!这个子函数若改成下面那样就不行了。

 if(temp>=6)
 {
  temp=0;
 }
 dula=0;
    P0=SEGTAB[DspBuf[temp]]; //读取数码管段值
    dula=1;
    dula=0;
  
    wela=0;    
 P0=BITAB[temp];  //数码管位选择
    wela=1;
    wela=0; 
}

 

 

错误的子程序,你知道错在哪里吗??

(1)void DspFun()  //显示函数
{
 uchar temp;
  if(temp>=6)
 {
  temp=0;
 }

temp=temp+1;  
 dula=0;
    P0=SEGTAB[DspBuf[temp]]; //读取数码管段值
    dula=1;
    dula=0;
  
    wela=0;    
 P0=BITAB[temp];  //数码管位选择
    wela=1;
    wela=0; 
}

 

 

(2)

void DspFun()  //显示函数
{
 uchar temp;
  if(temp>=6)
 {
  temp=0;
 }

else

   temp=temp+1;  
 dula=0;
    P0=SEGTAB[DspBuf[temp]]; //读取数码管段值
    dula=1;
    dula=0;
  
    wela=0;    
 P0=BITAB[temp];  //数码管位选择
    wela=1;
    wela=0; 
}

 

(3)

void DspFun()  //显示函数
{
 uchar temp;
   dula=0;
    P0=SEGTAB[DspBuf[temp]]; //读取数码管段值
    dula=1;
    dula=0;
  
    wela=0;    
 P0=BITAB[temp];  //数码管位选择
    wela=1;
    wela=0; 

 

if(temp>=6)
 {
  temp=0;
 }

temp=temp+1;  
}

 

以上的子程序都是将temp的判断部分的代码换了位置,可是经keil编译之后再下载都单片机就不行了,你知道错在哪里吗?

此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表