登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 数码管和矩阵的四位加法

[复制链接]
发表于 2022-1-31 11:13:47 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 单片机
学习安排: 写呗
开始时间: 2022-01-31
结束时间: 2022-01-31
由于上次 说 要搞一个

简单的尝试一下分时复用

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)
好懒~~不想说~~~
 楼主| 发表于 2022-1-31 22:25:44 | 显示全部楼层
本帖最后由 材料2105李天乐 于 2022-1-31 22:26 编辑
电气2109张烁琦 发表于 2022-1-31 20:47
可以封装一个字符串转整数函数

我这代码写的有点乱  , 加一个字符串转整数函数应该没有问题,可以简化代码  0。@。0  如果 要写6位加法的代码   那就有好多地方要简化了      要不太繁琐。
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表