由于上次 说 要搞一个
简单的尝试一下分时复用
http://bbs.hpuedd.com/forum.php?mod=viewthread&tid=2761&fromuid=1539
(出处: 电开社区)
看到一位大兄弟的问题 要搞一下 数码管 和 矩阵的 加法
我现在 写完了
开始6位加法我怕可能有点难
先搞一个4位加法
开始先抄金沙滩的矩阵加法 发现 不能显示
现在的代码基本上都是自己写的
我的大致思路就是
数字 0 1 2 3 4 ..... 一个一个扫描
数码管没事就刷新
对于数据的处理
按下一个键yes = 1; 就是数据处理和显示 缺点就一个周期只能读取一个数字
加法(k15)我的代码
/**********
加法
***********/
void KeyScanjia()
{
P0 = 0xFF ;
KEY_OUT_1 = 0;
if(!KEY_IN_3) // 扫描加法键是否按下
{
if(Ledbuff[3] != 0xFF) // 读加之前的数据 在 numer
{
for(j=0;j<10;j++)
{
if(Ledbuff[3] == Ledchar[j] ) // 判断 Ledbuff[3] 上的数字 j
{
numer = j; // 赋值给numer 下面就是同理 在这 我要一下 for循环一个也可以 Ledbuff
Ledbuff[3] = 0xFF;
}
}
}
if(Ledbuff[2] != 0xFF)
{
for(j=0;j<10;j++)
{
if(Ledbuff[2] == Ledchar[j] )
{
numer = numer*10 + j;
Ledbuff[2] = 0xFF;
}
}
}
if(Ledbuff[1] != 0xFF)
{
for(j=0;j<10;j++)
{
if(Ledbuff[1] == Ledchar[j] )
{
numer = numer*10 + j;
Ledbuff[1] = 0xFF;
}
}
}
if(Ledbuff[0] != 0xFF)
{
for(j=0;j<10;j++)
{
if(Ledbuff[0] == Ledchar[j] )
{
numer = numer*10 + j;
Ledbuff[0] = 0xFF;
}
}
}
}
}
这是我的 等于(k14) 代码
/**********
等于
***********/
void KeyScandengyu()
{
P0 = 0xFF ;
KEY_OUT_1 = 0;
if(!KEY_IN_2)
{
if(Ledbuff[3] != 0xFF)
{
for(j=0;j<10;j++)
{
if(Ledbuff[3] == Ledchar[j] )
{
result = j;
Ledbuff[3] = 0xFF;
}
}
}
if(Ledbuff[2] != 0xFF)
{
for(j=0;j<10;j++)
{
if(Ledbuff[2] == Ledchar[j] )
{
result = result*10 + j;
Ledbuff[2] = 0xFF;
}
}
}
if(Ledbuff[1] != 0xFF)
{
for(j=0;j<10;j++)
{
if(Ledbuff[1] == Ledchar[j] )
{
result = result*10 + j;
Ledbuff[1] = 0xFF;
}
}
}
if(Ledbuff[0] != 0xFF)
{
for(j=0;j<10;j++)
{
if(Ledbuff[0] == Ledchar[j] )
{
result = result*10 + j;
Ledbuff[0] = 0xFF;
}
}
}
//上面的数据处理于加法中的一样
result = numer + result ; // result 即是我们要结果
/**********把result的数字剥离出来**************/
numer1 = result / 10; // 把 十位放在个位
numer2 = result /100; // 把 百位 放在个位
numer3 = result /1000; // 把千位放在 个位
switch(result%10)
{
case 0edbuff[0] = Ledchar[0];break;
case 1edbuff[0] = Ledchar[1];break;
case 2edbuff[0] = Ledchar[2];break;
case 3edbuff[0] = Ledchar[3];break;
case 4edbuff[0] = Ledchar[4];break;
case 5edbuff[0] = Ledchar[5];break;
case 6edbuff[0] = Ledchar[6];break;
case 7edbuff[0] = Ledchar[7];break;
case 8edbuff[0] = Ledchar[8];break;
case 9edbuff[0] = Ledchar[9];break;
}
switch(numer1%10)
{
case 0:Ledbuff[1] = Ledchar[0];break;
case 1:Ledbuff[1] = Ledchar[1];break;
case 2:Ledbuff[1] = Ledchar[2];break;
case 3:Ledbuff[1] = Ledchar[3];break;
case 4:Ledbuff[1] = Ledchar[4];break;
case 5:Ledbuff[1] = Ledchar[5];break;
case 6:Ledbuff[1] = Ledchar[6];break;
case 7:Ledbuff[1] = Ledchar[7];break;
case 8:Ledbuff[1] = Ledchar[8];break;
case 9:Ledbuff[1] = Ledchar[9];break;
}
switch(numer2%10)
{
case 0:Ledbuff[2] = Ledchar[0];break;
case 1:Ledbuff[2] = Ledchar[1];break;
case 2:Ledbuff[2] = Ledchar[2];break;
case 3:Ledbuff[2] = Ledchar[3];break;
case 4:Ledbuff[2] = Ledchar[4];break;
case 5:Ledbuff[2] = Ledchar[5];break;
case 6:Ledbuff[2] = Ledchar[6];break;
case 7:Ledbuff[2] = Ledchar[7];break;
case 8:Ledbuff[2] = Ledchar[8];break;
case 9:Ledbuff[2] = Ledchar[9];break;
}
switch(numer3%10)
{
case 0:Ledbuff[3] = Ledchar[0];break;
case 1:Ledbuff[3] = Ledchar[1];break;
case 2:Ledbuff[3] = Ledchar[2];break;
case 3:Ledbuff[3] = Ledchar[3];break;
case 4:Ledbuff[3] = Ledchar[4];break;
case 5:Ledbuff[3] = Ledchar[5];break;
case 6:Ledbuff[3] = Ledchar[6];break;
case 7:Ledbuff[3] = Ledchar[7];break;
case 8:Ledbuff[3] = Ledchar[8];break;
case 9:Ledbuff[3] = Ledchar[9];break;
}
}
}
其他 的源码
我的代码没有简化(可以修改) 有兄弟可以参考一个 改一个 6位的加法
分时复用.rar
(47.71 KB, 下载次数: 204)
|