找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2942|回复: 5
收起左侧

新手 编程 遇难题 求教

[复制链接]
ID:9915 发表于 2014-4-26 16:07 | 显示全部楼层 |阅读模式
程序如下 原本是  按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);
        }

}


回复

使用道具 举报

ID:9915 发表于 2014-4-26 16:25 | 显示全部楼层
没人知道是什么问题么?
回复

使用道具 举报

ID:18297 发表于 2014-4-26 19:10 | 显示全部楼层
num=num++;
改为num++;或num=num+1.
应该会好。
回复

使用道具 举报

ID:9915 发表于 2014-4-26 19:27 | 显示全部楼层
zjjhtony 发表于 2014-4-26 19:10
num=num++;
改为num++;或num=num+1.
应该会好。

哇哦~经过这样一改,下面的问题解决了~ 版主威武!!!
回复

使用道具 举报

ID:61175 发表于 2014-4-27 14:33 | 显示全部楼层
把你的图发过来   我帮你烧一下
回复

使用道具 举报

ID:61175 发表于 2014-4-27 14:34 | 显示全部楼层
1354805504@qq.com   仿真图传过来   帮你烧一下
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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