第六课学习二

本文介绍了一次尝试使用单片机实现数码管计数的过程。首先尝试通过取余方法,但由于unsigned long在单片机中按16进制表示导致失败。接着采用常规方法,定义6个变量独立计数,但出现了数码管显示混乱的问题。作者提供了源代码,并表示将后续分析错误原因和改进方案。
摘要由CSDN通过智能技术生成

按计划,今天实现一个计数的功能,即按六个数码管进行计数累加显示,当右边一位值超过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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值