普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 6102|回复: 1

请高手帮我分析下面一段程序的试验现象

 关闭 [复制链接]

1

主题

1

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2015-12-3 12:36:00 | 显示全部楼层 |阅读模式
让数码管显示一个两位数,通过独立按键改变数值,分析按键按下时,为什么个位数就不亮了。


/*   LED 显示两位数0-59,按K1数值加1,按K2数值减1,按K3数值清0,
     按K4一次数值自动每秒加1,按K4第二次停止自动加1并保持数值      */
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit k1=P2^7;
sbit k2=P2^6;
sbit k3=P2^5;
sbit k4=P2^4;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                        //段选
unsigned char code site[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};                                        //位选
uchar num=0,i;
void display(uchar);
void delayms(unsigned xms);
void init()                                                  //中断初始化
{
        TMOD=0X11;
        EA=1;
        ET0=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;       
}
void keyscan()                                        //按键扫描
{
        if(k1==0)               
                delayms(20);
        if(k1==0)
        {
                num++;
                if(num==60)
                        num=0;
                while(!k1);
                       
        }
       
        if(k2==0)
        {
                delayms(20);
                if(k2==0)
                {
                       
                        if(num==0)
                                num=60;
                        num--;
                        while(!k2);
                }
        }       
        if(k3==0)
        {
                delayms(20);
                if(k3==0)
                {
                        num=0;
                        while(!k3);
                               
                }
        }
        if(k4==0)
        {
                delayms(20);
                if(k4==0)
                {                                
                                               
                        while(!k4);
                        TR0=~TR0;                                                
                }               
         }
}
void main()
{       
        init();       
        while(1)
        {
                keyscan();
               
                display(num);                                         
               
        }
}


void display(uchar num)                           //显示
{
         uchar shi,ge;
         shi=table[num/10];
         ge=table[num%10];
         
         P0=0xfd;
         P1=ge;
         delayms(5);
         P0=0xfe;
         P1=shi;
         delayms(5);

}  

void delayms(unsigned xms)
{
         unsigned int i,j;
         for(i=xms;i>0;i--)
                        for(j=123;j>0;j--);                       
}

void T0_INT() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        i++;
        if(i==20)
         {
                 num++;
                i=0;
         }
         if(num==60)
                 num=0;
}


回复

使用道具 举报

139

主题

382

帖子

1531

积分

金牌会员

Rank: 6Rank: 6

积分
1531
发表于 2015-12-3 18:30:45 | 显示全部楼层
按键按下之后等键弹起,显示效果得不到刷新也无法移位所以不亮
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-1 21:17 , Processed in 0.092096 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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