#include<reg52.h>
unsigned char key_num,count=0,k;
unsigned long sum=0;
unsigned char code str[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};
void scan();
void disp_led(unsigned long int dat);
void delay(unsigned int dly);
void main()
{for(k=0;k<=7;k++)
{SBUF=str[10];
while(TI==0);
TI=0;
}
while(1)
{scan();
count=key_num;
sum=sum*10+count;
scan();
while(key_num!=16)
scan();
disp_led(sum);
delay(1);
scan();
while(key_num==16)
scan();
}
}
void disp_led(unsigned long int dat)
{
unsigned char num[8];
if((dat>=0)&&(dat<=9))
{
num[0]=10;
num[1]=10;
num[2]=10;
num[3]=10;
num[4]=10;
num[5]=10;
num[6]=10;
num[7]=dat;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if((dat>=10)&&(dat<=99))
{
num[0]=10;
num[1]=10;
num[2]=10;
num[3]=10;
num[4]=10;
num[5]=10;
num[6]=dat/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if((dat>=100)&&(dat<=999))
{
num[0]=10;
num[1]=10;
num[2]=10;
num[3]=10;
num[4]=10;
num[5]=dat/100;
num[6]=dat%100/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if((dat>=1000)&&(dat<=9999))
{
num[0]=10;
num[1]=10;
num[2]=10;
num[3]=10;
num[4]=dat/1000;
num[5]=dat%1000/100;
num[6]=dat%100/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if((dat>=10000)&&(dat<=99999))
{
num[0]=10;
num[1]=10;
num[2]=10;
num[3]=dat/10000;
num[4]=dat%10000/1000;
num[5]=dat%1000/100;
num[6]=dat%100/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if((dat>=100000)&&(dat<=999999))
{
num[0]=10;
num[1]=10;
num[2]=dat/100000;
num[3]=dat%100000/10000;
num[4]=dat%10000/1000;
num[5]=dat%1000/100;
num[6]=dat%100/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if((dat>=1000000)&&(dat<=9999999))
{
num[0]=10;
num[1]=dat/1000000;
num[2]=dat%1000000/100000;
num[3]=dat%100000/10000;
num[4]=dat%10000/1000;
num[5]=dat%1000/100;
num[6]=dat%100/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if((dat>=10000000)&&(dat<=99999999))
{
num[0]=dat/10000000;
num[1]=dat%10000000/1000000;
num[2]=dat%1000000/100000;
num[3]=dat%100000/10000;
num[4]=dat%10000/1000;
num[5]=dat%1000/100;
num[6]=dat%100/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
if(dat>=100000000)
{
dat=dat%100000000;
num[0]=dat/10000000;
num[1]=dat%10000000/1000000;
num[2]=dat%1000000/100000;
num[3]=dat%100000/10000;
num[4]=dat%10000/1000;
num[5]=dat%1000/100;
num[6]=dat%100/10;
num[7]=dat%10;
for(k=0;k<=7;k++)
{SBUF=str[num[7-k]];
while(TI==0);
TI=0;
}
}
}
void delay(unsigned int dly)
{int i,j;
for(i=0;i<100;i++)
for(j=0;j<dly;j++);
}
void scan()
{unsigned char readkey,x_temp,y_temp;
P2=0x0f;
x_temp=P2&0x0f;
P2=0xf0;
y_temp=P2&0xf0;
readkey=x_temp|y_temp;
switch(readkey)
{case 0x7e:key_num=0; break;
case 0x7d:key_num=1; break;
case 0x7b:key_num=2; break;
case 0x77:key_num=3; break;
case 0xbe:key_num=4; break;
case 0xbd:key_num=5; break;
case 0xbb:key_num=6; break;
case 0xb7:key_num=7; break;
case 0xde:key_num=8; break;
case 0xdd:key_num=9; break;
case 0xff:key_num=16;
}
}
å¾ä¸æ¯ledè¿æ¥ççµè·¯ï¼ç©éµæé®æ¥çæ¯P2å£ã
...数码管,怎么实现:按1显示1,再按2显示12,这样子。。
unsigned char code str[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};void scan();void disp_led(unsigned long int dat);void delay(unsigned int dly);void main(){for(k=0;k<=7;k++){SBUF=str[10];while(TI==0);TI=0;} while(1){scan();count=key...
...键盘按一个键,显示那一个键的数值,但我这个单片机通上电数码管都不 ...
jlsmg[5]=jlsmg[4];jlsmg[4]=jlsmg[3];jlsmg[3]=jlsmg[2];jlsmg[2]=jlsmg[1];jlsmg[1]=table[jl];keystate=0;jl++;\/\/} display();再添加适当的延时,以便人能观察出显示的变化效果。
单片机 按键控制8位数码管显示问题
display=weima_table[i]; \/\/数码管需要显示的位 weima_latch=1; \/\/锁存器(位码)打开 weima_latch=0; \/\/锁存器(位码)关闭 display=cunchudisplay[i]; \/\/数码管需要显示的段 duanma_latch=1; \/\/锁存器(段码)打开 duanma_latch=0; \/\/锁存器(段码)关闭 Delay(100);} 判断归零...
矩阵键盘在数码管上显示1-16的平方,只显示个位
while(1) { aa1 = fanhui();display(bai, shi, ge); \/\/用显示,当延时,消抖.aa2 = fanhui(); \/\/再读.if (aa1 == aa2) aa = aa1; \/\/两者相等,确认到aa ---如果不相等呢?aa = ?i = aa * aa;bai = i \/ 100;shi = (i % 100) \/ 10;ge = i % 10;dis...
单片机原理及应用张刚毅数码管显示4乘4矩阵键盘键号按下时,显示对应的...
P3=0xff;return (16);} \/ 判键是否按下子函数 \/ void keydown(){ P3=0x0f;if((P3&0x0f)!=0x0f){ keyscan();P0=disp_code[key];beep();} } \/ 主函数 \/ main(){ P0 = 0xbf;P2 = 0x7f; \/\/数码管显示"-"P3 = 0xff;while(1){ keydown();} } ...
关于51单片机的一个小程序,为什么我的数码管不能显示 0 1 2 3 ...
temp = temp&0xf0;这一句过后temp的低四位必定为0,swtch后面的语句都进不了。
一个关于51单片机矩阵键盘的问题。我现在已经能实现矩阵键盘的检测,我 ...
case 0xd0: num=1;break;case 0xb0: num=2;break;case 0x70: num=3;break;} while(temp!=0xf0) \/\/松手检测 { temp=P1;temp=temp&0xf0;display(); \/\/调用显示 } } } P1=0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0){ delay(10);while(temp!=0xf0){ temp=P1;temp...
51单片机4*4矩阵键盘求平方问题
是你转换成显示码错了吧,数码管的显示可不是你直接送数就行的,得把256分成三个数,第一个显示2第二个显示5第三个显示6,每个数码管最大显示到9。你的程序第三个为16,这样大于9了,你得分成1和6这样才行。
proteus仿真4x4矩阵键盘中断方式扫描数码管显示
在Proteus仿真中,实现4x4矩阵键盘中断方式扫描并控制数码管显示,主要步骤包括:1. **硬件连接**:将4x4矩阵键盘的行线连接到单片机的某个I\/O口(如P1.0~P1.3),列线连接到另一个I\/O口(如P1.4~P1.7)。数码管的段选线连接到单片机的另一个I\/O口(如P0),用于显示按键对应的字符。2...
想用3*3的矩阵键盘实现每按一个建,LED数码管上面显示对应的数字~1~9
=的优先级高,所以你就得不到答案,加各括号,把与运算的优先级提上去就好了 试试看!~你的if条件判断都存在这个问题呢!~比如说 if(P1&0xf1!=0xf1)应该改为 if((P1&0xf1)!=0xf1)如果还不行就还有其他的问题 我看到你这里有点问题就告诉你,程序我没有全部看完 ...