找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

新手 编程 遇难题 求教

[复制链接]
a375845518 发表于 2014-4-26 16:11:32 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
程序如下 原本是  按key1 数字加,按key2数字减,按key3数字清零,按key4 数字每秒自动加1。。。现在key1、2、3都正常,按key4没自动加1。求高手赐教。问题出在哪里呢?


#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
uchar num,numt0;
uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};

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

void delayms(uchar xms)                //延时程序
{
        uchar i,j;
        for(i=xms;i>0;i--)
                for(j=113;j>0;j--);
}

void keyscan()                                //键盘扫描程序
{
        if(key1==0)                        //扫描按键1
        {
                delayms(10);
                if(key1==0)
                {
                        num++;
                        if(num==60)
                                num=0;
                        while(!key1);
                }
        }        

        if(key2==0)                        //扫描按键2
        {
                delayms(10);
                if(key2==0)
                {
                        if(num==0)
                                num=60;        
                        num--;
                        while(!key2);
                }
        }        

        if(key3==0)                        //扫描按键3
        {
                delayms(10);
                if(key3==0)
                {
                        num=0;
                        while(!key3);
                }
        }        

        if(key4==0)                        //扫描按键4
        {
                delayms(10);
                if(key4==0)
                {
                        while(!key4);
                        TR0=!TR0;
                }
        }        
}

void display(uchar laiyuan)//数码管显示 扫描程序
{
        uchar shi,ge;

        shi=laiyuan/10;
        ge=laiyuan%10;

        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        P0=0x00;
        delayms(5);

        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        P0=0x00;
        delayms(5);
}

void T0_time() interrupt 1        //定时器0 中断服务程序
{
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
        numt0++;
        if(numt0==20)
                {
                        numt0=0;
                        num=num++;
                        if(num==60)
                                num=0;        
                }

}



void main ()                                //主程序
{
        num=0x00;
        init();
        while(1)
        {
        keyscan();
        display(num);
        }

}
 楼主| a375845518 发表于 2014-4-26 16:25:06 | 显示全部楼层
没有人肯帮忙么?
 楼主| a375845518 发表于 2014-4-26 19:29:10 | 显示全部楼层
解决了~
//定时器0 中断服务程序 里面的num=num++;
改为num++;或num=num+1.
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 15:18 , Processed in 0.067600 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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