全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

新手 编程 遇难题 求教

[复制链接]
4076 2

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

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

x
程序如下 原本是  按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);
        }

}

举报

回复

2 个评论

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

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表