请教各位大佬,这是显示0·9999的代码,如图所示,请问怎么修改才能实现“当数字为一位数时不显示前面的三个0,当数字为两位数时不显示前面的三个0”以此类推!!!
单片机源程序如下:
- /***************************************************************************
- 标题: 数码管的显示
- 实验板:LY51-L2B开发板
- 作者: 林洋电子-单片机
- 客服QQ:52927029
- 邮箱: 52927029@qq.com
- 说明: 显示00-99,动态显示+变化显示
- ******************************************************************************/
- //头文件:
- #include <reg52.h>
- //引脚定义:
- sbit SMG_q = P0^0; //定义数码管阳级控制脚(千位)
- sbit SMG_b = P0^1; //定义数码管阳级控制脚(百位)
- sbit SMG_s = P0^2; //定义数码管阳级控制脚(十位)
- sbit SMG_g = P0^3; //定义数码管阳级控制脚(个位)
- //变量定义:
- unsigned char table[]=
- {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //表:共阳数码管 0-9
- //函数声明:
- void display(unsigned char da);//定义显示函数,参数为显示内容,只显示两位数
- void delay(void);
- //主函数,C语言的入口函数:
- void main(void)
- {
- unsigned char i=0; //作为查表的索引号
- unsigned char ldata; //变量用作0~99计数
- unsigned int j; //此变量作为计数跳变刷新时间
- while(1)
- {
- j=500;
- while(j--){
- display(ldata); //刷新5000次,约1秒,注:在C语言里是没有周期可计算的哦~~~
- }
- if(ldata<99)
- ldata++; //刷新完成约1秒,变量做加计数
- else
- ldata=0;
- }
- }
- //显示函数,参数为显示内容,只显示两位数
- void display(unsigned char da)
- {
- SMG_q=0; //选择千位数码管
- P2=table[da/1000%100]; //获取个位值,查表输出定义好的数码管段值与P2口,显示相应的0-9
- delay(); //延时
- P2=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_q=1; //关闭千位数码管
- SMG_b=0; //选择百位数码管
- P2=table[da/100%10]; //获取个位值,查表输出定义好的数码管段值与P2口,显示相应的0-9
- delay(); //延时
- P2=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_b=1; //关闭百位数码管
- SMG_s=0; //选择十位数码管
- P2=table[da/10]; //获取十位值,查表输出定义好的数码管段值与P2口,显示相应的0-9
- delay(); //延时
- P2=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_s=1; //关闭十位数码管
- SMG_g=0; //选择个位数码管
- P2=table[da%10]; //获取个位值,查表输出定义好的数码管段值与P2口,显示相应的0-9
- delay(); //延时
- P2=0XFF; //清除数码管显示,因是共阳型,所以不是0
- SMG_g=1; //关闭个位数码管
- }
- //延时子函数,短暂延时
- void delay(void){
- unsigned char i=10;
- while(i--);
- }
复制代码
|