用C语言使用89C51 做一个电子琴实验,求程序和图!谢谢了

[复制链接]
查看11 | 回复1 | 2011-5-27 12:47:30 | 显示全部楼层 |阅读模式
回复

使用道具 举报

千问 | 2011-5-27 12:47:30 | 显示全部楼层
#includereg52.h
#defineuintunsignedint
#defineucharunsignedchar

unsignedintcodetab[]=
{63628,63835,64021,64103,
64260,64400,64524,64580,
64684,64777,64820,64898,
64968,65030,65058,65110};//频率表
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};//数码管段码显示值

sbitP1_0=P1^0;

ucharnum,temp,num1,key,i,j,STH0,STL0;
voiddelay(uintz)
{
        uintx,y;
        for(x=z;x0;x--)
                for(y=110;y0;y--);
}

ucharkeyscan();
voiddisplay(ucharaa);
voidmain()
{

        TMOD=0x01;//定时器0工作方式1
        ET0=1;//开定时器0中断
        EA=1;//开总中断
        P2=0;


        P0=0;
       
       
       
       
        while(1)
                {
                        keyscan();//键盘扫描子程序
                }
}

ucharkeyscan()
{
                        P3=0xfe;//第一行判断
                        temp=P3;
                        temp=temp
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp
                                        while(temp!=0xf0)
                                        {
                                               
                                        switch(temp)
                                                {
                                                        case0xe0:num=1;
                                                                break;
                                                        case0xd0:num=2;
                                                                break;
                                                        case0xb0:num=3;
                                                                break;
                                                        case0x70:num=4;
                                                                break;
                                                }
                                                P1_0=~P1_0;
                                                P0=table[num];
                                                STH0=tab[num-1]/256;
                                                STL0=tab[num-1]%6;
                                                TR0=1;



                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp
                                                }
                                                TR0=0;
                                        }
                                }

                        P3=0xfd;//第二行判断
                        temp=P3;
                        temp=temp
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp
                                        while(temp!=0xf0)
                                        {
                                       
                                        switch(temp)
                                                {
                                                        case0xe0:num=5;
                                                                break;
                                                        case0xd0:num=6;
                                                                break;
                                                        case0xb0:num=7;
                                                                break;
                                                        case0x70:num=8;
                                                                break;
                                                }
                                                P1_0=~P1_0;
                                                if(num=7)
                                                P0=table[num];
                                                else
                                                P0=table[num-7];
                                                STH0=tab[num-1]/256;
                                                STL0=tab[num-1]%6;
                                                TR0=1;
                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp
                                                }
                                                TR0=0;
                                        }
                                }


                        P3=0xfb;//第三行判断
                        temp=P3;
                        temp=temp
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp
                                        while(temp!=0xf0)
                                        {
                                               
                                        switch(temp)
                                                {
                                                        case0xe0:num=9;
                                                                break;
                                                        case0xd0:num=10;
                                                                break;
                                                        case0xb0:num=11;
                                                                break;
                                                        case0x70:num=12;
                                                                break;
                                                }
                                                P1_0=~P1_0;
                                                P0=table[num-7];
                                                STH0=tab[num-1]/256;
                                                STL0=tab[num-1]%6;
                                                TR0=1;
                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp
                                                }
                                                TR0=0;
                                        }
                                }


                        P3=0xf7;//第四行判断
                        temp=P3;
                        temp=temp
                        while(temp!=0xf0)
                                {
                                        delay(5);
                                        temp=P3;
                                        temp=temp
                                        while(temp!=0xf0)
                                        {
                                               
                                        switch(temp)
                                                {
                                                        case0xe0:num=13;
                                                                break;
                                                        case0xd0:num=14;
                                                                break;
                                                        case0xb0:num=15;
                                                                break;
                                                        case0x70:num=16;
                                                                break;
                                                }
                                                P1_0=~P1_0;
                                                if(num=14)                                                       
                                                P0=table[num-7];
                                                else
                                                P0=table[num-14];
                                                STH0=tab[num-1]/256;
                                                STL0=tab[num-1]%6;
                                                TR0=1;
                                        while(temp!=0xf0)
                                                {
                                                        temp=P3;
                                                        temp=temp
                                                }
                                                TR0=0;
                                        }
                                }
returnnum;

}

voidtime0()interrupt1
{
TH0=STH0;
TL0=STL0;
P1_0=~P1_0;
}
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行