• 单片机C语言实例:4、数码管左右移显示


    一、数码管左移显示:

    程序实例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 int i,k,j;
    16. unsigned char s;
    17. while(1)
    18. {
    19. j++;
    20. if(j==20)
    21. {
    22. j=0;
    23. if(0==k)
    24. {
    25. for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区
    26. TempData[s]=0;
    27. }
    28. TempData[8-i]=DuanMa[k]; //把需要显示的字符依次送缓冲区
    29. TempData[8+1-i]=0; //不需要显示的区域清零
    30. if(i==(8-k))
    31. {
    32. i=0;
    33. k++;
    34. if(k==8)
    35. k=0;
    36. }
    37. i++;
    38. }
    39. Display(0,8);//从第一位显示,共显示8位
    40. }
    41. }
    42. /*------------------------------------------------
    43. 延时函数,含有输入参数 unsigned int t,无返回值
    44. unsigned int 是定义无符号整形变量,其值的范围是
    45. 0~65535
    46. ------------------------------------------------*/
    47. void Delay(unsigned int t)
    48. {
    49. while(--t);
    50. }
    51. /*------------------------------------------------
    52. 显示函数,用于动态扫描数码管
    53. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    54. 如输入0表示从第一个显示。
    55. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    56. ------------------------------------------------*/
    57. void Display(unsigned char FirstBit,unsigned char Num)
    58. {
    59. unsigned char i;
    60. for(i=0;i
    61. {
    62. DataPort=0; //清空数据,防止有交替重影
    63. LATCH1=1; //段锁存
    64. LATCH1=0;
    65. DataPort=WeiMa[i+FirstBit]; //取位码
    66. LATCH2=1; //位锁存
    67. LATCH2=0;
    68. DataPort=TempData[i]; //取显示数据,段码
    69. LATCH1=1; //段锁存
    70. LATCH1=0;
    71. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    72. }
    73. }

    二、数码管右移显示:

    程序实例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 int i,k,j;
    16. unsigned char s;
    17. while(1)
    18. {
    19. j++;
    20. if(j==20)
    21. {
    22. j=0;
    23. if(0==k)
    24. {
    25. for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区
    26. TempData[s]=0;
    27. }
    28. TempData[8-i]=DuanMa[k]; //把需要显示的字符依次送缓冲区
    29. TempData[9-i]=0; //不需要显示的区域清零
    30. if(i==(8-k))
    31. {
    32. i=0;
    33. k++;
    34. if(k==8)
    35. k=0;
    36. }
    37. i++;
    38. }
    39. Display(0,8);//从第一位显示,共显示8位
    40. }
    41. }
    42. /*------------------------------------------------
    43. 延时函数,含有输入参数 unsigned int t,无返回值
    44. unsigned int 是定义无符号整形变量,其值的范围是
    45. 0~65535
    46. ------------------------------------------------*/
    47. void Delay(unsigned int t)
    48. {
    49. while(--t);
    50. }
    51. /*------------------------------------------------
    52. 显示函数,用于动态扫描数码管
    53. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    54. 如输入0表示从第一个显示。
    55. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    56. ------------------------------------------------*/
    57. void Display(unsigned char FirstBit,unsigned char Num)
    58. {
    59. unsigned char i;
    60. for(i=0;i
    61. {
    62. DataPort=0; //清空数据,防止有交替重影
    63. LATCH1=1; //段锁存
    64. LATCH1=0;
    65. DataPort=WeiMa[i+FirstBit]; //取位码
    66. LATCH2=1; //位锁存
    67. LATCH2=0;
    68. DataPort=TempData[7-i]; //取显示数据,段码 这里只需要 把扫描方向更换一下即可
    69. LATCH1=1; //段锁存
    70. LATCH1=0;
    71. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    72. }
    73. }

    三、数码管右移显示:

    程序实例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 i,k,j;
    16. unsigned char s;
    17. while(1)
    18. {
    19. j++;
    20. if(j==20)
    21. {
    22. j=0;
    23. if(0==k)
    24. {
    25. for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区
    26. TempData[s]=0;
    27. }
    28. TempData[8-i]=DuanMa[k]; //把需要显示的字符依次送缓冲区
    29. TempData[9-i]=0; //不需要显示的区域清零
    30. if(i==(8-k))
    31. {
    32. i=0;
    33. k++;
    34. if(k==8)
    35. k=0;
    36. }
    37. i++;
    38. }
    39. Display(0,8);//从第一位显示,共显示8位
    40. }
    41. }
    42. /*------------------------------------------------
    43. 延时函数,含有输入参数 unsigned int t,无返回值
    44. unsigned int 是定义无符号整形变量,其值的范围是
    45. 0~65535
    46. ------------------------------------------------*/
    47. void Delay(unsigned int t)
    48. {
    49. while(--t);
    50. }
    51. /*------------------------------------------------
    52. 显示函数,用于动态扫描数码管
    53. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    54. 如输入0表示从第一个显示。
    55. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    56. ------------------------------------------------*/
    57. void Display(unsigned char FirstBit,unsigned char Num)
    58. {
    59. unsigned char i;
    60. for(i=0;i
    61. {
    62. DataPort=0; //清空数据,防止有交替重影
    63. LATCH1=1; //段锁存
    64. LATCH1=0;
    65. DataPort=WeiMa[i+FirstBit]; //取位码
    66. LATCH2=1; //位锁存
    67. LATCH2=0;
    68. DataPort=TempData[7-i]; //取显示数据,段码 这里只需要 把扫描方向更换一下即可
    69. LATCH1=1; //段锁存
    70. LATCH1=0;
    71. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    72. }
    73. }

    四、数码管右移显示:

    程序实例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 i,k,j;
    16. unsigned char s;
    17. while(1)
    18. {
    19. j++;
    20. if(j==20)
    21. {
    22. j=0;
    23. if(0==k)
    24. {
    25. for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区
    26. TempData[s]=0;
    27. }
    28. TempData[i-1]=DuanMa[k]; //把需要显示的字符依次送缓冲区
    29. TempData[i-2]=0; //不需要显示的区域清零
    30. if(i==(8-k))
    31. {
    32. i=0;
    33. k++;
    34. if(k==8)
    35. k=0;
    36. }
    37. i++;
    38. }
    39. Display(0,8);//从第一位显示,共显示8位
    40. }
    41. }
    42. /*------------------------------------------------
    43. 延时函数,含有输入参数 unsigned int t,无返回值
    44. unsigned int 是定义无符号整形变量,其值的范围是
    45. 0~65535
    46. ------------------------------------------------*/
    47. void Delay(unsigned int t)
    48. {
    49. while(--t);
    50. }
    51. /*------------------------------------------------
    52. 显示函数,用于动态扫描数码管
    53. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    54. 如输入0表示从第一个显示。
    55. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    56. ------------------------------------------------*/
    57. void Display(unsigned char FirstBit,unsigned char Num)
    58. {
    59. unsigned char i;
    60. for(i=0;i
    61. {
    62. DataPort=0; //清空数据,防止有交替重影
    63. LATCH1=1; //段锁存
    64. LATCH1=0;
    65. DataPort=WeiMa[i+FirstBit]; //取位码
    66. LATCH2=1; //位锁存
    67. LATCH2=0;
    68. DataPort=TempData[i]; //取显示数据,段码
    69. LATCH1=1; //段锁存
    70. LATCH1=0;
    71. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    72. }
    73. }

    五、数码管循环左移显示:

    程序实例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 int i,j,k=7,m;
    16. unsigned char *pa=TempData,*pb=DuanMa;//定义2个指针,并赋值2个数组初始地址
    17. //*pa=TempData 等效于 *pa=&TempData[0]
    18. while(1)
    19. {
    20. j++;
    21. if(j==20) //用于延时,改变值可以改变延时长度
    22. {
    23. j=0; //延时到重新赋值
    24. for(i=0;i<(8-k);i++) //循环把显示的字符值赋值,给临时缓冲数组TempData
    25. {
    26. *(pa+k+i)=*(pb+i+m);//使用指针操作赋值
    27. }
    28. //8位左移出去,右边空出来的数
    29. //码管需要熄灭,
    30. //所有赋值0 m表示移出位置,同
    31. //时也表示右边需要熄灭位数
    32. for(i=0;i
    33. *(pa+8-m+i)=0;
    34. if(k>0) //判断这些值以便循环显示
    35. k--;
    36. if(m<8&&k==0)
    37. m++;
    38. else if(m==8)
    39. {m=0;k=7;}
    40. }
    41. Display(0,8);//从第一位显示,共显示8位
    42. }
    43. }
    44. /*------------------------------------------------
    45. 延时函数,含有输入参数 unsigned int t,无返回值
    46. unsigned int 是定义无符号整形变量,其值的范围是
    47. 0~65535
    48. ------------------------------------------------*/
    49. void Delay(unsigned int t)
    50. {
    51. while(--t);
    52. }
    53. /*------------------------------------------------
    54. 显示函数,用于动态扫描数码管
    55. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    56. 如输入0表示从第一个显示。
    57. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    58. ------------------------------------------------*/
    59. void Display(unsigned char FirstBit,unsigned char Num)
    60. {
    61. unsigned char i;
    62. for(i=0;i
    63. {
    64. DataPort=0; //清空数据,防止有交替重影
    65. LATCH1=1; //段锁存
    66. LATCH1=0;
    67. DataPort=WeiMa[i+FirstBit]; //取位码
    68. LATCH2=1; //位锁存
    69. LATCH2=0;
    70. DataPort=TempData[i]; //取显示数据,段码
    71. LATCH1=1; //段锁存
    72. LATCH1=0;
    73. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    74. }
    75. }

    六、数码管循环右移显示:

    程序实例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 int i,j,k=7,m;
    16. unsigned char *pa=TempData,*pb=DuanMa;//定义2个指针,并赋值2个数组初始地址
    17. //*pa=TempData 等效于 *pa=&TempData[0]
    18. while(1)
    19. {
    20. j++;
    21. if(j==20) //用于延时,改变值可以改变延时长度
    22. {
    23. j=0; //延时到重新赋值
    24. for(i=0;i<(8-k);i++) //循环把显示的字符值赋值给临时缓冲数组TempData
    25. {
    26. *(pa+k+i)=*(pb+i+m);//使用指针操作赋值
    27. }
    28. for(i=0;i//8位左移出去,右边空出来的数码管需要熄灭,所有赋值0 m表示移出位置,同时也表示右边需要熄灭位数
    29. *(pa+8-m+i)=0;
    30. if(k>0) //判断这些值以便循环显示
    31. k--;
    32. if(m<8&&k==0)
    33. m++;
    34. else if(m==8)
    35. {m=0;k=7;}
    36. }
    37. Display(0,8);//从第一位显示,共显示8位
    38. }
    39. }
    40. /*------------------------------------------------
    41. 延时函数,含有输入参数 unsigned int t,无返回值
    42. unsigned int 是定义无符号整形变量,其值的范围是
    43. 0~65535
    44. ------------------------------------------------*/
    45. void Delay(unsigned int t)
    46. {
    47. while(--t);
    48. }
    49. /*------------------------------------------------
    50. 显示函数,用于动态扫描数码管
    51. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    52. 如输入0表示从第一个显示。
    53. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    54. ------------------------------------------------*/
    55. void Display(unsigned char FirstBit,unsigned char Num)
    56. {
    57. unsigned char i;
    58. for(i=0;i
    59. {
    60. DataPort=0; //清空数据,防止有交替重影
    61. LATCH1=1; //段锁存
    62. LATCH1=0;
    63. DataPort=WeiMa[i+FirstBit]; //取位码
    64. LATCH2=1; //位锁存
    65. LATCH2=0;
    66. DataPort=TempData[7-i]; //取显示数据,段码 取反显示顺序,就把左移变成右移
    67. LATCH1=1; //段锁存
    68. LATCH1=0;
    69. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    70. }
    71. }

    七、数码管循环右移1显示:

    程序实例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 i,j,k=7,m;
    16. unsigned char *pa=TempData,*pb=DuanMa;//定义2个指针,并赋值2个数组初始地址
    17. //*pa=TempData 等效于 *pa=&TempData[0]
    18. while(1)
    19. {
    20. j++;
    21. if(j==20) //用于延时,改变值可以改变延时长度
    22. {
    23. j=0; //延时到重新赋值
    24. for(i=0;i<(8-k);i++) //循环把显示的字符值赋值给临时缓冲数组TempData
    25. {
    26. *(pa+k+i)=*(pb+i+m);//使用指针操作赋值
    27. }
    28. for(i=0;i//8位左移出去,右边空出来的数码管需要熄灭,所有
    29. //赋值0 m表示移出位置,同时也表示右边需要熄灭位数
    30. *(pa+8-m+i)=0;
    31. if(k>0) //判断这些值以便循环显示
    32. k--;
    33. if(m<8&&k==0)
    34. m++;
    35. else if(m==8)
    36. {m=0;k=7;}
    37. }
    38. Display(0,8);//从第一位显示,共显示8位
    39. }
    40. }
    41. /*------------------------------------------------
    42. 延时函数,含有输入参数 unsigned int t,无返回值
    43. unsigned int 是定义无符号整形变量,其值的范围是
    44. 0~65535
    45. ------------------------------------------------*/
    46. void Delay(unsigned int t)
    47. {
    48. while(--t);
    49. }
    50. /*------------------------------------------------
    51. 显示函数,用于动态扫描数码管
    52. 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示
    53. 如输入0表示从第一个显示。
    54. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    55. ------------------------------------------------*/
    56. void Display(unsigned char FirstBit,unsigned char Num)
    57. {
    58. unsigned char i;
    59. for(i=0;i
    60. {
    61. DataPort=0; //清空数据,防止有交替重影
    62. LATCH1=1; //段锁存
    63. LATCH1=0;
    64. DataPort=WeiMa[i+FirstBit]; //取位码
    65. LATCH2=1; //位锁存
    66. LATCH2=0;
    67. DataPort=TempData[7-i]; //取显示数据,段码
    68. //取反显示顺序,就把左移变成右移
    69. LATCH1=1; //段锁存
    70. LATCH1=0;
    71. Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影
    72. }
    73. }

    八、数码管循环右移2显示:

    程序实例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 i,j,k=7,m;
    16. unsigned char *pa=&TempData[7],*pb=DuanMa;//定义2个指针,并赋值2个数组初始地址
    17. //*pb=dofly_DuanMa 等效于 *pb=&dofly_DuanMa[0]
    18. while(1)
    19. {
    20. j++;
    21. if(j==20) //用于延时,改变值可以改变延时长度
    22. {
    23. j=0; //延时到重新赋值
    24. for(i=0;i<(8-k);i++) //循环把显示的字符值
    25. //赋值给临时缓冲数组TempData
    26. {
    27. *(pa-k-i)=*(pb+i+m);//使用指针操作赋值
    28. }
    29. for(i=0;i//8位右移出去,
    30. //左边空出来的数码管需要熄灭,
    31. //所有赋值0 m表示移出位置,同时也表示左边需要熄灭位数
    32. *(pa-8+m-i)=0;
    33. if(k>0) //判断这些值以便循环显示
    34. k--;
    35. if(m<8&&k==0)
    36. m++;
    37. else if(m==8)
    38. {m=0;k=7;}
    39. }
    40. Display(0,8);//从第一位显示,共显示8位
    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. 从第三个数码管开始显示
    56. 如输入0表示从第一个显示。
    57. Num表示需要显示的位数,如需要显示99两位数值则该值输入2
    58. ------------------------------------------------*/
    59. void Display(unsigned char FirstBit,unsigned char Num)
    60. {
    61. unsigned char i;
    62. for(i=0;i
    63. {
    64. DataPort=0; //清空数据,防止有交替重影
    65. LATCH1=1; //段锁存
    66. LATCH1=0;
    67. DataPort=WeiMa[i+FirstBit]; //取位码
    68. LATCH2=1; //位锁存
    69. LATCH2=0;
    70. DataPort=TempData[i]; //取显示数据,段码
    71. LATCH1=1; //段锁存
    72. LATCH1=0;
    73. Delay(200); // 扫描间隙延时,时间太长会闪烁,
    74. //太短会造成重影
    75. }
    76. }

  • 相关阅读:
    AlexNet论文解读
    windows安装部署node.js并搭建Vue项目
    基于PHP+MySQL学生成绩管理系统的设计与实现
    软件工程概述-----RUP开发模式
    网络安全架构:建立安全架构方法的指导框架
    docker通过挂载conf文件启动redis
    从您输入网站 URL 到其在屏幕上完成加载的整个过程
    【无标题】BOOT SERVICES函数实现原型:
    【MATLAB】详解 M 文件与 M 函数
    Axure教程—动态单散点图(中继器)
  • 原文地址:https://blog.csdn.net/m0_49968063/article/details/132789270