您现在所在的是:

单片机论坛

回帖:11个,阅读:3005 [上一页] [1] [2] [下一页]
5134
liguoxing
文章数:1695
年度积分:50
历史总积分:5134
注册时间:2006/4/21
发站内信
发表于:2008/8/10 11:01:00
#10楼
以下是引用85880527在2008-8-8 9:52:00的发言:
斑竹你太无耻了,凭啥子要删我的帖子
斑竹删得好.看在斑竹删的份上我再来谈一下我上面编的程序的若干问题.
其实由于实在是忙,上面的程序其实没经过实际测试,只做了回格式语句错误的检测.
刚才注意到上面的程序里的,我忽略了P1.7端子在作为BCD输出口和个位共阴极数码管的公共端双重输出时带来的冲突问题,若执行上面的程序,则会出现个位数码管始终不亮的问题.解决办法是把T1中断程序里的"MOV LED, LEDX ;"放在输出LED公共端处理步骤之前,这样,P1.7会马上改正正确的值.具体修改部分如下:
OUTLED1:MOV LED, LED1 ;输出个位字码
CLR LED01 ;接通个位LED共阴极公共端
SETB LED02
SETB LED03
SETB LED04
SETB LED05
LJMP LED6
OUTLED2:MOV LED, LED2 ;输出十位字码
SETB LED01 ;十位LED阴极选通
CLR LED02
SETB LED03
SETB LED04
SETB LED05
LJMP LED6
OUTLED3:MOV LED, LED3 ;输出百位字码
SETB LED01 ;百位LED阴极选通
SETB LED02
CLR LED03
SETB LED04
SETB LED05 ;
LJMP LED6
OUTLED4:MOV LED, LED4 ;输出千位字码
SETB LED01 ;千位LED阴极选通
SETB LED02
SETB LED03
CLR LED04
SETB LED05
LJMP LED6
OUTLED5:MOV LED, LED5 ;输出万个位字码
SETB LED01 ;万位LED阴极选通
SETB LED02
SETB LED03
SETB LED04
CLR LED05 ;
LED6: POP PSW ;
POP ACC ;
RETI ;
另外我还是重审一下,以上程序还得大家自个去验证,我无非提个思路,若发觉实际发现有什么问题可以询问,我尽量给解决.
呜呜。我没有个性化Logo,谁能帮我设计个?拜托啦。
902
xiaoluziyun
文章数:1
年度积分:50
历史总积分:902
注册时间:2008/8/12
发站内信
发表于:2008/8/12 17:29:00
#11楼
#include <at89x52.h>
unsigned char table1[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x0};
unsigned char tabl2[8]={0},DISP,i;
long int x5,x3,x6;

void xianshi()
    {  DISP++;  
      if(DISP==0x8)
DISP=0;
   switch(DISP)
      {  case 0:{P2=~0X7F;P1=tabl2[0];break;}
 case 1:{P2=~0XBF;P1=tabl2[1];break;}
 case 2:{P2=~0XDF;P1=tabl2[2];break;}
     case 3:{P2=~0XEF;P1=tabl2[3];break;}
         case 4:{P2=~0XF7;P1=tabl2[4];break;}
 case 5:{P2=~0XFB;P1=tabl2[5];break;}
 case 6:{P2=~0XFD;P1=tabl2[6];break;}
     case 7:{P2=~0XFE;P1=tabl2[7];break;}}}//    7段码显示子程序


void suanchu()
{
unsigned char x0,x4;
     x4=TH0;x3=128;x5=0;
for(x0=8;x0>0;x0--)      
{
x3=x3*2;
x4=x4>>1;
if(CY==1)
x5=x5+x3;
}      
x6=x5+TL0;    
}                                        //计算TO的数


void jisuan()
  {tabl2[0]=table1[x6%10];
tabl2[1]=table1[x6/10%10];
tabl2[2]=table1[x6/100%10];
  tabl2[3]=table1[x6/1000%10];
  tabl2[4]=table1[x6/10000%10];
tabl2[5]=table1[x6/100000%10];
tabl2[6]=table1[10];
tabl2[7]=table1[10];}                //TO的各位码


void ti() interrupt 0
{
TR0=0;
suanchu();
jisuan();
while(P3_6==1)
xianshi();
TR0=1;
}
                                     //中断停止计数并显示


main()
{
TMOD=0x05;TL0=0;TH0=0;                //TO方式1
while(P3_6==1)xianshi();              //P3。6开始计数
TR0=1;
IT0=1;IE=0x81;                        //允许中断 开中断
while(1);
}

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004