注册 登录
编程论坛 单片机编程

单片机和proteus

祝你前程似锦 发布于 2020-11-03 19:46, 5124 次点击
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1 = P3^4;
sbit key2 = P3^5;
sbit key3 = P3^6;
sbit key4 = P3^7;
sbit dula = P2^6;
sbit wela = P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay(uint);
uchar numt0,num;
void display(uchar numdis)
{
    uchar shi,ge;
    shi = numdis/10;
    ge = numdis%10;
    dula = 1;
    P0 = table[shi];
    dula = 0;
    P0 = 0xff;
    wela = 1;
    P0 = 0xfe;
    wela = 0;
    delay(5);

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

}
void delay(uint z)
{
    uint i,j;
    for(i = z;i > 0;i--)
    for(j = 110;j > 0;j--);
}               
void init()
{
TMOD = 0x01;
TH0 = (65536 - 50000)/256;
TL0 = (65536 - 50000)%256;
EA = 1;
ET0 = 1;
}
void keyscan()
{
    if(key1 == 0)
    {
        delay(10);
        if(key1 == 0)
        {
            num++;
            if(num == 60)
                num = 0;
                while(!key1);
        }
    }
    if(key2 == 0)
    {
        delay(10);
        if(key2 == 0)
        {
            if(num == 0)
                num = 60;
                num--;
                while(!key2);
        }
    }
    if(key3 == 0)
    {
        delay(10);
        if(key3 == 0)
        {
            num = 0;
            while(!key3);
        }
    }
    if(key4 == 0)
    {
        delay(10);
        if(key4 == 0)
        {
            while(!key4);
            TR0 = ~TR0;
        }
    }

}
void main()
{
     init();
    while(1)
    {
        keyscan();
        display(num);
    }

}                           
void T0_time()interrupt 1
{
    TH0 = (65536 - 50000)/256;
    TL0 = (65536 - 50000)%256;
    numt0++;
   
    if(numt0 == 20)
    {
        numt0 = 0;
        num++;
        if(num == 60)
        num = 0;
    }
}
这是我程序 下面是Proteus
只有本站会员才能查看附件,请 登录

3 回复
#2
祝你前程似锦2020-11-03 19:47
他一仿真就出现这样的问题
只有本站会员才能查看附件,请 登录
#3
xianfajushi2020-11-04 09:04
P0 = !table[shi];试看
#4
nosnoy2020-11-07 11:40
void keyscan()
{
    if(key1 == 0)
    {
        delay(10);
        if(key1 == 0)
        {
            num++;
            if(num == 60)
                num = 0;
                while(!key1);
        }
    }
    if(key2 == 0)
    {
        delay(10);
        if(key2 == 0)
        {
            if(num == 0)
                num = 60;
                num--;
                while(!key2);
        }
    }
    if(key3 == 0)
    {
        delay(10);
        if(key3 == 0)
        {
            num = 0;
            while(!key3);
        }
    }
    if(key4 == 0)
    {
        delay(10);
        if(key4 == 0)
        {
            while(!key4);
            TR0 = ~TR0;
        }
    }

}
你的按键扫描程序有大问题
1