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编译之后再下载都单片机就不行了,你知道错在哪里吗?
|