按计划,今天实现一个计数的功能,即按六个数码管进行计数累加显示,当右边一位值超过9时,则进一位,如此类推。
最开始时想采用取余的方式,一看一共有6个数码管,最大可达999999,当到达这个值后清零从新开始计数。用uint16一共能到达65536,因为用这个类型的变量不行,于是试了一个unsigned long,这个自然可以表示的数很大。于是按我思路编写了一下代码,满以为用取余的方法,依次取出每一位再将其对应至数码客中进行显示即可,没想到调了半天不行,后面发现这里面的unsigned long是按16进制进行表示的,当我用到取余时,其会将超过9的数,比如a,b,c等这些当成一位,比如对10取余的话,则会取出a,b,c这样的来,这样的话,我的数码管的进位表示就不是10进制的了,反而变成了16进制计数了,这自然不是我想要的。没有办法,自然只能放弃这种方法了,可能是我的单片机技术还不深入的原因,对一些细节不清楚,以为只是编写一个程序,没想到以失败告终。
于是只能用一般的方法,定义6个变量,以分别对应6个数码管,当右边一位超过9时,则在前面的一位加1,如此累加。满以为这下应该没有问题了,可是却很遗憾,数码管显示非常混乱,思考了半天,不得要领。想来可能是对单片机还不能安全掌握的缘故,因此只有暂时放弃,等后面再回过头来再想想为什么会出现这样的问题。
源代码附上,等后面来解释错误原因,以及如何进行改进。
#include <reg52.h>
typedef unsigned char uint8;