当前位置:   article > 正文

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

数字动态累加显示

一、个位数累加动态显示

程序实例1:

  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  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<Num;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. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/408776
推荐阅读
相关标签
  

闽ICP备14008679号