首页 新闻 搜索 专区 学院

51单片机数码管显示手机号,不管按下什么都显示0?

0
悬赏园豆:20 [待解决问题]
  1. PNP三极管作为驱动,基极输入低电平三极管导通(即位选线置低电平时 位选有效)位选接有上拉电阻(bilibili编程一时爽 第九_集)

  2. 按键扫描(key=扫描到的按键值)、数码管显示结束一次;key赋一个无关值,不然会每个位一直显示上一个显示的数(在动态显示的情况下)**/还没找到别的解决办法
    **

————————————————————————————————————————
下面是我的代码,和仿真图,不管按下0~9哪个键都显示0,调试看没什么问题??

—————————————————————————————————————————————
程序源码
——————————————————————————————————————

include<reg51.h>

include<stdlib.h>

define unchar unsigned char

define unint unsigned int

unchar code seg[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
unchar count=0;
unchar key=16;
unchar array;
unchar sum;
unchar scan_key();
void Display(unchar S);//cou=count
unchar input(unchar k);
void delayms(unchar t);
//
*****************************************************
void main()
{
P3=0xff; //位选,开始全1,PNP驱动 低电平导通,
P2=0xff; //段选,共阳极
array=(unchar)malloc(sizeof(unchar)sum);
while(1)
{
scan_key();//return key=扫描到的按键值
sum=input(key);//return count ; sum=count 已经从按键输入的数据(0~9)个数
Display(sum);
key=16;
}
}
//*****************************************************
unchar scan_key()
{
unchar hang,lie;
P1=0x0f;
if(P1!=0x0f)
delayms(10);
if(P1!=0x0f)
{
switch(P1&0x0f)
{
case 0x0e:hang=0;break;
case 0x0d:hang=1;break;
case 0x0b:hang=2;break;
case 0x07:hang=3;break;
}
P1=0xf0;
switch(P1&0xf0)
{
case 0xe0:lie=0;break;
case 0xd0:lie=1;break;
case 0xb0:lie=2;break;
case 0x70:lie=3;break;
}
P1=0x0f;
while(P1!=0x0f);
key=hang*4+lie;
}

return (key);

}
//*******************************************************************
unchar input(unchar k)//k=key 扫描到的按键值存入到array[]数组
{
if(count>8)
count=0;
if(k>=0&&k<=9)
{

array[count]=k;//save input digit

count++;  //the number of 'number[]'

}

return count;//count : the number of inputed digit
}

///*****************************************************************
void Display(unchar S)//S = sum = the number of 'array[]'
{

 unchar i,j;
 for(i=1,j=0;i<=S,j<S;i++,j++)
 {
	  P3=~(0x80>>j);
   P2=seg[array[S-i]];
	
	 delayms(5);
	 P2=0xff;
	 
 }

}
//***********************************************************
void delayms(unchar t)
{
unchar i,j;
for(i=t;i>0;i--)
for(j=120;j>0;j--);
}



Duckyaya的主页 Duckyaya | 初学一级 | 园豆:166
提问于:2020-05-06 16:53
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册