单片机学习笔记(数字分离首位是0不显示)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字分离 比如把123456这个整数进行分离,方便按位显示在数码管上
思路:1、把这个数对10取模 123456%10 结果是 6 就把第一位分离出来了
2、把这个数除10后再进行对10取模 123456/10 结果12345 再12345%10 结果是5 就把第二位分离出来了
3、进行这样的循环 这个数是6位就循环6次,把结果存放在一组变量中,这样就把这个数的各位都进行分离出来了
4、数字首位为0,数码管不显示0,数字当中或末尾是0则显示0
程序
5、经过循环语句后,就把数字每位的数据储存在了数字显示缓存数字Ledbuff[]中了
void ShowNumber(unsigned long num) //显示数字函数,参数是1个长整形的数字num
{
signed char i; //定义变量i用于循环数的位数
unsigned char buf[6]; //定义一个数组用于保存分离出来各位的数据
for(i=0; i<6; i++)
{
buf[i] = num % 10;
num = num / 10;
} //上面2个语句就是循环6次,把1个6位数进行按位分离后存放在数组buf中
for(i=5; i>=1; i--) //进行首位是零,不显示
{
if(buf[i] == 0) //如果首位是零,则把数码管显示缓存数据为0XFF,由于是共阳极数码管,如果数据是0xff 则数码管不显示
{
LedBuff[i] = 0xFF;
}
else //如果首位不是零,则跳出循环
break;
}
for(; i>=0; i--) //i继承了上面语句的数值,把该位的数字通过Ledchar[buf[i]]数组,进行转换为该数字的显示数据并赋值给数码管显示缓存
{
LedBuff[i] = LedChar[buf[i]];
}
}
unsigned char code LedChar[]={ //0-F在数码管上显示的数据表用数组存放
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[6] = { //每位数字显示的数据储存数组缓存,设置初始值是0xff
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};