找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

C语言编程:如何分离一个多位数数字

查看数: 14540 | 评论数: 4 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-5-12 04:41

正文摘要:

摘要: 数码管是电子设计之中最常用的显示元器件,但是数码管一次只能显示一个数字,如果要显示多位数字只能使用多个数码管并且要把数字拆分开,一位一位的送到数码管中才能显示,今天就介绍把一个多位数字拆分的方法 ...

回复

ID:476527 发表于 2020-2-28 13:48
分离个位只需要直接%10就行了,为何还要先%100再%10?
ID:407089 发表于 2020-2-28 09:33
提供一个正整数的数码管解决方案,供参考。
  1. /*
  2.   本程序是在数码管上显示正整数的例程,显示数字长度不超过8位(需要定义无符号长整型变量)
  3. */

  4. #include <reg52.h>
  5. #include <math.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>

  8. typedef unsigned char uint8;        //8位无符号型
  9. typedef unsigned char uchar;        //8位无符号型
  10. typedef unsigned int uint16;
  11. typedef unsigned long uint32;

  12. #define DATA P0
  13. sbit KEY_S2 = P3^0;                //S2独立按键
  14. sbit KEY_S3 = P3^1;                //S3独立按键
  15. sbit seg_sel = P2^6;
  16. sbit bit_sel = P2^7;

  17. //共阴极数码管0-9编码
  18. uchar code seg_tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  19. uchar code bit_tab[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

  20. //将要被显示的数字(只要不是大于8位的正整数均可)
  21. uint32 birthday = 508;

  22. //用于保存数字对应数码管编码的数组
  23. uchar num_code[8] = {0};

  24. void delay(uint16 num)
  25. {
  26.         uint16 x,y;
  27.         for(x=num; x>0; x--) for(y=110; y>0; y--){}
  28. }

  29. //拆分整数到num_code数组
  30. void int2code(uint32 inum)
  31. {
  32.         uint8 i=0, n;
  33.         uint32 tmp = inum;

  34.         for(i=0; i<8; i++)
  35.         {
  36.                
  37.                 if(tmp>0)
  38.                 {       
  39.                         n = tmp % 10;
  40.                         tmp = (tmp-n) / 10;
  41.                         num_code[7-i] = seg_tab[n];
  42.                 }else{
  43.                         num_code[i] = 0x00;
  44.                 }                                    
  45.         }
  46. }

  47. //8位数码管显示函数
  48. void display(void)
  49. {
  50.         uint8 j = 0;
  51.         for (j=0; j<8; j++)
  52.         {
  53.                 //移位
  54.                 bit_sel = 1;
  55.                 DATA = bit_tab[j];
  56.                 bit_sel = 0;

  57.                 //显数
  58.                 seg_sel = 1;
  59.                 DATA = num_code[j];
  60.                 delay(1);
  61.                
  62.                 //消影(共阳极则为0xff,就是让所有数码管暂时不亮)
  63.                 DATA = 0x00;
  64.                 seg_sel = 0;
  65.         }
  66. }

  67. void main(void)
  68. {

  69.         while(1)
  70.         {
  71.                 int2code(birthday);
  72.                
  73.                 display();
  74.                
  75.                 if (KEY_S2==0)
  76.                 {
  77.                         delay(10);
  78.                         if (KEY_S2==0){
  79.                                 birthday++;
  80.                         }
  81.                         while(!KEY_S2);
  82.                 }
  83.         }
  84. }
复制代码



ID:535242 发表于 2020-2-27 21:31
怎么感觉公式每总结出来
ID:692711 发表于 2020-2-27 08:43
接着在往下写点吧谢谢您   我在回来看  我咋回来我是路痴

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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