• 单片机C语言实例:3、数码管累加与累减动态显示


    一、个位数累加动态显示

    程序实例1:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned char num;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==500) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
    21. {
    22. j=0;
    23. num++;
    24. if(num==10)//用于显示0~9
    25. num=0;
    26. }
    27. TempData[0]=DuanMa[num%10];//分解显示信息,如要显示68,则68/10=6 68%10=8
    28. Display(2,1);
    29. }
    30. }
    31. /*------------------------------------------------
    32. 延时函数,含有输入参数 unsigned int t,无返回值
    33. unsigned int 是定义无符号整形变量,其值的范围是
    34. 0~65535
    35. ------------------------------------------------*/
    36. void Delay(unsigned int t)
    37. {
    38. while(--t);
    39. }
    40. /*------------------------------------------------
    41. 显示函数,用于动态扫描数码管
    42. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    43. 如输入0表示从第一个显示。
    44. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    45. ------------------------------------------------*/
    46. void Display(unsigned char FirstBit,unsigned char Num)
    47. {
    48. unsigned char i;
    49. for(i=0;i
    50. {
    51. DataPort=0; //清空数据,防止有交替重影
    52. LATCH1=1; //段锁存
    53. LATCH1=0;
    54. DataPort=WeiMa[i+FirstBit]; //取位码
    55. LATCH2=1; //位锁存
    56. LATCH2=0;
    57. DataPort=TempData[i]; //取显示数据,段码
    58. LATCH1=1; //段锁存
    59. LATCH1=0;
    60. Delay(200); // 扫描间隙延时,时间太长会闪烁,
    61. //太短会造成重影
    62. }
    63. }

    二、两位数累加动态显示

    程序实例2:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned char num;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==500) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
    21. {
    22. j=0;
    23. num++;
    24. if(num==100)//用于显示0~99
    25. num = 0;
    26. }
    27. TempData[0] = DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
    28. TempData[1] = DuanMa[num%10];
    29. Display(2,2);
    30. }
    31. }
    32. /*------------------------------------------------
    33. 延时函数,含有输入参数 unsigned int t,无返回值
    34. unsigned int 是定义无符号整形变量,其值的范围是
    35. 0~65535
    36. ------------------------------------------------*/
    37. void Delay(unsigned int t)
    38. {
    39. while(--t);
    40. }
    41. /*------------------------------------------------
    42. 显示函数,用于动态扫描数码管
    43. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示
    44. 从第三个数码管开始显示
    45. 如输入0表示从第一个显示。
    46. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    47. ------------------------------------------------*/
    48. void Display(unsigned char FirstBit,unsigned char Num)
    49. {
    50. unsigned char i;
    51. for(i=0;i
    52. {
    53. DataPort = 0; //清空数据,防止有交替重影
    54. LATCH1 = 1; //段锁存
    55. LATCH1 = 0;
    56. DataPort = WeiMa[i+FirstBit]; //取位码
    57. LATCH2 = 1; //位锁存
    58. LATCH2 = 0;
    59. DataPort = TempData[i]; //取显示数据,段码
    60. LATCH1 = 1; //段锁存
    61. LATCH1 = 0;
    62. Delay(200); // 扫描间隙延时,时间太长会闪烁,
    63. //太短会造成重影
    64. }
    65. }

    三、3位数累加动态显示

    程序实例3:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned int num;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==200) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
    21. {
    22. j=0;
    23. num++;
    24. if(num==1000)//用于显示0~999
    25. num=0;
    26. }
    27. TempData[0] = DuanMa[num/100];//分解显示信息,如要显示68,则68/10=6 68%10=8
    28. TempData[1] = DuanMa[(num%100)/10];
    29. TempData[2] = DuanMa[(num%100)%10];
    30. Display(2,3);
    31. }
    32. }
    33. /*------------------------------------------------
    34. 延时函数,含有输入参数 unsigned int t,无返回值
    35. unsigned int 是定义无符号整形变量,其值的范围是
    36. 0~65535
    37. ------------------------------------------------*/
    38. void Delay(unsigned int t)
    39. {
    40. while(--t);
    41. }
    42. /*------------------------------------------------
    43. 显示函数,用于动态扫描数码管
    44. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    45. 如输入0表示从第一个显示。
    46. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    47. ------------------------------------------------*/
    48. void Display(unsigned char FirstBit,unsigned char Num)
    49. {
    50. unsigned char i;
    51. for(i=0;i
    52. {
    53. DataPort = 0; //清空数据,防止有交替重影
    54. LATCH1 = 1; //段锁存
    55. LATCH1 = 0;
    56. DataPort = WeiMa[i+FirstBit]; //取位码
    57. LATCH2 = 1; //位锁存
    58. LATCH2 = 0;
    59. DataPort = TempData[i]; //取显示数据,段码
    60. LATCH1 = 1; //段锁存
    61. LATCH1 = 0;
    62. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    63. }
    64. }

    四、4位数累加动态显示

    程序实例4:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned int num;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==10) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
    21. {
    22. j=0;
    23. num++;
    24. if(num==10000)//用于显示0~9999
    25. num=0;
    26. }
    27. TempData[0] = DuanMa[num/1000];//分解显示信息,如要显示68,则68/10=6 68%10=8
    28. TempData[1] = DuanMa[(num%1000)/100];
    29. TempData[2] = DuanMa[((num%1000)%100)/10];
    30. TempData[3] = DuanMa[((num%1000)%100)%10];
    31. Display(2,4);
    32. }
    33. }
    34. /*------------------------------------------------
    35. 延时函数,含有输入参数 unsigned int t,无返回值
    36. unsigned int 是定义无符号整形变量,其值的范围是
    37. 0~65535
    38. ------------------------------------------------*/
    39. void Delay(unsigned int t)
    40. {
    41. while(--t);
    42. }
    43. /*------------------------------------------------
    44. 显示函数,用于动态扫描数码管
    45. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    46. 如输入0表示从第一个显示。
    47. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    48. ------------------------------------------------*/
    49. void Display(unsigned char FirstBit,unsigned char Num)
    50. {
    51. unsigned char i;
    52. for(i=0;i
    53. {
    54. DataPort=0; //清空数据,防止有交替重影
    55. LATCH1=1; //段锁存
    56. LATCH1=0;
    57. DataPort = WeiMa[i+FirstBit]; //取位码
    58. LATCH2 = 1; //位锁存
    59. LATCH2 = 0;
    60. DataPort = TempData[i]; //取显示数据,段码
    61. LATCH1 = 1; //段锁存
    62. LATCH1 = 0;
    63. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    64. }
    65. }

    五、个位数累减动态显示

    程序实例5:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned char num=9;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==500) //检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化
    21. {
    22. j=0;
    23. if(num>0)//用于显示0~9
    24. num--;
    25. else
    26. num=9;
    27. }
    28. TempData[0]=DuanMa[num%10];//分解显示信息,如要显示68,则68/10=6 68%10=8
    29. Display(2,1);
    30. }
    31. }
    32. /*------------------------------------------------
    33. 延时函数,含有输入参数 unsigned int t,无返回值
    34. unsigned int 是定义无符号整形变量,其值的范围是
    35. 0~65535
    36. ------------------------------------------------*/
    37. void Delay(unsigned int t)
    38. {
    39. while(--t);
    40. }
    41. /*------------------------------------------------
    42. 显示函数,用于动态扫描数码管
    43. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    44. 如输入0表示从第一个显示。
    45. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    46. ------------------------------------------------*/
    47. void Display(unsigned char FirstBit,unsigned char Num)
    48. {
    49. unsigned char i;
    50. for(i=0;i
    51. {
    52. DataPort=0; //清空数据,防止有交替重影
    53. LATCH1=1; //段锁存
    54. LATCH1=0;
    55. DataPort=WeiMa[i+FirstBit]; //取位码
    56. LATCH2=1; //位锁存
    57. LATCH2=0;
    58. DataPort=TempData[i]; //取显示数据,段码
    59. LATCH1=1; //段锁存
    60. LATCH1=0;
    61. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    62. }
    63. }

    六、两位数累减动态显示

    程序实例6:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned char num=99;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==500) //检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化
    21. {
    22. j=0;
    23. if(num>0)//用于显示0~99
    24. num--;
    25. else
    26. num=99;
    27. }
    28. TempData[0]=DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6 68%10=8
    29. TempData[1]=DuanMa[num%10];
    30. Display(2,2);
    31. }
    32. }
    33. /*------------------------------------------------
    34. 延时函数,含有输入参数 unsigned int t,无返回值
    35. unsigned int 是定义无符号整形变量,其值的范围是
    36. 0~65535
    37. ------------------------------------------------*/
    38. void Delay(unsigned int t)
    39. {
    40. while(--t);
    41. }
    42. /*------------------------------------------------
    43. 显示函数,用于动态扫描数码管
    44. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    45. 如输入0表示从第一个显示。
    46. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    47. ------------------------------------------------*/
    48. void Display(unsigned char FirstBit,unsigned char Num)
    49. {
    50. unsigned char i;
    51. for(i=0;i
    52. {
    53. DataPort=0; //清空数据,防止有交替重影
    54. LATCH1=1; //段锁存
    55. LATCH1=0;
    56. DataPort=WeiMa[i+FirstBit]; //取位码
    57. LATCH2=1; //位锁存
    58. LATCH2=0;
    59. DataPort=TempData[i]; //取显示数据,段码
    60. LATCH1=1; //段锁存
    61. LATCH1=0;
    62. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    63. }
    64. }

    七、3位数累减动态显示

    程序实例7:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned int num=999;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==200) //检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化
    21. {
    22. j=0;
    23. if(num>0)//用于显示0~999
    24. num--;
    25. else
    26. num=999;
    27. }
    28. TempData[0] = DuanMa[num/100];//分解显示信息,如要显示68,则68/10=6 68%10=8
    29. TempData[1] = DuanMa[(num%100)/10];
    30. TempData[2] = DuanMa[(num%100)%10];
    31. Display(2,3);
    32. }
    33. }
    34. /*------------------------------------------------
    35. 延时函数,含有输入参数 unsigned int t,无返回值
    36. unsigned int 是定义无符号整形变量,其值的范围是
    37. 0~65535
    38. ------------------------------------------------*/
    39. void Delay(unsigned int t)
    40. {
    41. while(--t);
    42. }
    43. /*------------------------------------------------
    44. 显示函数,用于动态扫描数码管
    45. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    46. 如输入0表示从第一个显示。
    47. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    48. ------------------------------------------------*/
    49. void Display(unsigned char FirstBit,unsigned char Num)
    50. {
    51. unsigned char i;
    52. for(i=0;i
    53. {
    54. DataPort=0; //清空数据,防止有交替重影
    55. LATCH1=1; //段锁存
    56. LATCH1=0;
    57. DataPort=WeiMa[i+FirstBit]; //取位码
    58. LATCH2=1; //位锁存
    59. LATCH2=0;
    60. DataPort=TempData[i]; //取显示数据,段码
    61. LATCH1=1; //段锁存
    62. LATCH1=0;
    63. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    64. }
    65. }

    八、4位数累减动态显示

    程序实例8:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned int num=9999;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==10) //检测当前数值显示了一小段时间后,需要显示的数值 -1,实现数据显示的变化
    21. {
    22. j=0;
    23. if(num>00)//用于显示0~9999
    24. num--;
    25. else
    26. num=9999;
    27. }
    28. TempData[0] = DuanMa[num/1000];//分解显示信息,如要显示68,则68/10=6 68%10=8
    29. TempData[1] = DuanMa[(num%1000)/100];
    30. TempData[2] = DuanMa[((num%1000)%100)/10];
    31. TempData[3] = DuanMa[((num%1000)%100)%10];
    32. Display(2,4);
    33. }
    34. }
    35. /*------------------------------------------------
    36. 延时函数,含有输入参数 unsigned int t,无返回值
    37. unsigned int 是定义无符号整形变量,其值的范围是
    38. 0~65535
    39. ------------------------------------------------*/
    40. void Delay(unsigned int t)
    41. {
    42. while(--t);
    43. }
    44. /*------------------------------------------------
    45. 显示函数,用于动态扫描数码管
    46. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    47. 如输入0表示从第一个显示。
    48. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    49. ------------------------------------------------*/
    50. void Display(unsigned char FirstBit,unsigned char Num)
    51. {
    52. unsigned char i;
    53. for(i=0;i
    54. {
    55. DataPort=0; //清空数据,防止有交替重影
    56. LATCH1 = 1; //段锁存
    57. LATCH1 = 0;
    58. DataPort = WeiMa[i+FirstBit]; //取位码
    59. LATCH2 = 1; //位锁存
    60. LATCH2 = 0;
    61. DataPort = TempData[i]; //取显示数据,段码
    62. LATCH1 = 1; //段锁存
    63. LATCH1 = 0;
    64. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    65. }
    66. }

    九、小数点的显示

    程序实例9:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned int num;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==200) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
    21. {
    22. j=0;
    23. num++;
    24. if(num==1000)//用于显示0~999
    25. num=0;
    26. }
    27. TempData[0] = DuanMa[num/100];//分解显示信息,如要显示68,则68/10=6 68%10=8
    28. TempData[1] = DuanMa[(num%100)/10]|0x80; //共阴数码管只要在对应的数字后面 | 0x80 即可显示小数点
    29. TempData[2] = DuanMa[(num%100)%10];
    30. Display(2,3);
    31. }
    32. }
    33. /*------------------------------------------------
    34. 延时函数,含有输入参数 unsigned int t,无返回值
    35. unsigned int 是定义无符号整形变量,其值的范围是
    36. 0~65535
    37. ------------------------------------------------*/
    38. void Delay(unsigned int t)
    39. {
    40. while(--t);
    41. }
    42. /*------------------------------------------------
    43. 显示函数,用于动态扫描数码管
    44. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    45. 如输入0表示从第一个显示。
    46. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    47. ------------------------------------------------*/
    48. void Display(unsigned char FirstBit,unsigned char Num)
    49. {
    50. unsigned char i;
    51. for(i=0;i
    52. {
    53. DataPort=0; //清空数据,防止有交替重影
    54. LATCH1=1; //段锁存
    55. LATCH1=0;
    56. DataPort=WeiMa[i+FirstBit]; //取位码
    57. LATCH2=1; //位锁存
    58. LATCH2=0;
    59. DataPort=TempData[i]; //取显示数据,段码
    60. LATCH1=1; //段锁存
    61. LATCH1=0;
    62. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    63. }
    64. }

    十、数码管消隐

    程序实例10:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned int num;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==10) //检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化
    21. {
    22. j=0;
    23. num++;
    24. if(num==10000)//用于显示0~9999
    25. num=0;
    26. }
    27. if(num<1000) //如果小于1000则千位不显示
    28. TempData[0]=0;
    29. else
    30. TempData[0]=DuanMa[num/1000];//分解显示信息,如要显示68,则68/10=6 68%10=8
    31. if(num<100) //如果小于100则千位和百位都不显示
    32. TempData[1]=0;
    33. else
    34. TempData[1]=dofly_DuanMa[(num%1000)/100];
    35. if(num<10) //如果小于10,则千位、百位和十位都不显示
    36. TempData[2]=0;
    37. else
    38. TempData[2]=dofly_DuanMa[((num%1000)%100)/10];
    39. TempData[3]=dofly_DuanMa[((num%1000)%100)%10];
    40. Display(2,4);
    41. }
    42. }
    43. /*------------------------------------------------
    44. 延时函数,含有输入参数 unsigned int t,无返回值
    45. unsigned int 是定义无符号整形变量,其值的范围是
    46. 0~65535
    47. ------------------------------------------------*/
    48. void Delay(unsigned int t)
    49. {
    50. while(--t);
    51. }
    52. /*------------------------------------------------
    53. 显示函数,用于动态扫描数码管
    54. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    55. 如输入0表示从第一个显示。
    56. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    57. ------------------------------------------------*/
    58. void Display(unsigned char FirstBit,unsigned char Num)
    59. {
    60. unsigned char i;
    61. for(i=0;i
    62. {
    63. DataPort=0; //清空数据,防止有交替重影
    64. LATCH1=1; //段锁存
    65. LATCH1=0;
    66. DataPort=WeiMa[i+FirstBit]; //取位码
    67. LATCH2=1; //位锁存
    68. LATCH2=0;
    69. DataPort=TempData[i]; //取显示数据,段码
    70. LATCH1=1; //段锁存
    71. LATCH1=0;
    72. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    73. }
    74. }

    十一、数码管累加累减带消影

    程序实例11:

    1. #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
    3. sbit LATCH1 = P2^2;//定义锁存使能端口 段锁存
    4. sbit LATCH2 = P2^3;// 位锁存
    5. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
    6. unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
    7. unsigned char TempData[8]; //存储显示值的全局变量
    8. void Delay(unsigned int t); //函数声明
    9. void Display(unsigned char FirstBit,unsigned char Num);
    10. /*------------------------------------------------
    11. 主函数
    12. ------------------------------------------------*/
    13. main()
    14. {
    15. unsigned int numA=999,numB=0;
    16. unsigned int j;
    17. while(1)
    18. {
    19. j++;
    20. if(j==10) //检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化
    21. {
    22. j=0;
    23. numB++;
    24. if(numA>0)//用于显示0~999
    25. numA--;
    26. else
    27. numA=999;
    28. if(numB==1000)
    29. numB=0;
    30. }
    31. //递减的三位数码管,带消隐
    32. if(numA<100)
    33. TempData[0]=0;
    34. else
    35. TempData[0]=DuanMa[numA/100];//分解显示信息,
    36. //如要显示68,则68/10=6 68%10=8
    37. if(numA<10)
    38. TempData[1]=0;
    39. else
    40. TempData[1]=DuanMa[(numA%100)/10];
    41. TempData[2]=DuanMa[(numA%100)%10];
    42. //中间2位数码管不显示,赋值0
    43. TempData[3]=0;
    44. TempData[4]=0;
    45. //递增的三位数码管,带消隐
    46. if(numB<100)
    47. TempData[5]=0;
    48. else
    49. TempData[5]=DuanMa[numB/100];//分解显示信息,
    50. //如要显示68,则68/10=6 68%10=8
    51. if(numB<10)
    52. TempData[6]=0;
    53. else
    54. TempData[6]=DuanMa[(numB%100)/10];
    55. TempData[7]=DuanMa[(numB%100)%10];
    56. Display(0,8);//从第一位显示,共显示8位
    57. }
    58. }
    59. /*------------------------------------------------
    60. 延时函数,含有输入参数 unsigned int t,无返回值
    61. unsigned int 是定义无符号整形变量,其值的范围是
    62. 0~65535
    63. ------------------------------------------------*/
    64. void Delay(unsigned int t)
    65. {
    66. while(--t);
    67. }
    68. /*------------------------------------------------
    69. 显示函数,用于动态扫描数码管
    70. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示
    71. 从第三个数码管开始显示
    72. 如输入0表示从第一个显示。
    73. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    74. ------------------------------------------------*/
    75. void Display(unsigned char FirstBit,unsigned char Num)
    76. {
    77. unsigned char i;
    78. for(i=0;i
    79. {
    80. DataPort=0; //清空数据,防止有交替重影
    81. LATCH1=1; //段锁存
    82. LATCH1=0;
    83. DataPort=WeiMa[i+FirstBit]; //取位码
    84. LATCH2=1; //位锁存
    85. LATCH2=0;
    86. DataPort=TempData[i]; //取显示数据,段码
    87. LATCH1=1; //段锁存
    88. LATCH1=0;
    89. Delay(200); // 扫描间隙延时,时间太长会闪烁,
    90. //太短会造成重影
    91. }
    92. }

  • 相关阅读:
    如何修改min.js或者压缩后的js,以便提高代码的可读性。
    eyb:SpringSecurity:Oauth2协议
    Linux磁盘常见知识
    C++ Qt 学习(十):Qt 其他技巧
    848. 有向图的拓扑序列(BFS应用)
    Win10怎么设置待机时间
    MySQL数据库期末考试试题及参考答案(01)
    06 redis 集群搭建
    SpringCloud Gateway基于nacos实现动态路由
    DPDK-A3: KVM使用SRIOV和虚机使用DPDK
  • 原文地址:https://blog.csdn.net/m0_49968063/article/details/132788715