|
本帖最后由 Tobacco 于 2012-7-27 21:11 编辑
大家好,我初学单片机,今天写一个动态数码管程序的时候遇到一个问题很不解。请大家看看下面的程序先:
芯片是stc89C52RC,8位数码管共阴极,电路是这样的:p2.2~p2.4通过38译码器控制8位数码管片选信号。段信号由p0控制。
显示效果是8位数码管,第0~6位数码管依次显示数字0~6,第七位数码管循环显示0~F。- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar i;
- uchar code table[]=
- { //共阴极0~f数码管编码
- 0x3f,0x06,0x5b,0x4f, //0~3
- 0x66,0x6d,0x7d,0x07, //4~7
- 0x7f,0x6f,0x77,0x7c, //8~b
- 0x39,0x5e,0x79,0x71 //c~f
- };
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--) ;
- }
- void wei7(uint n) //第七位数码管独立显示0-F
- {
- while(1){ //while-break 为什么不能删除?
- uchar x,count;
- count++;
- if(count==n) //每扫描n次,第七位数码管显示x+1
- {
- x++;P0=table[x];count=0;if(x==16){x=0;}
- }
- P0=table[x]; //如果不够n次,就继续显示x
- break;
- }
- }
- void main ()
- {
- while(1)
- {
- for(i=0;i<8;i++)
- {
- P2=0x00 ;//000 000 00 ,001-00100,010-01000,,,111-11100
- P2=P2+i*4;
- P0=table[i] ;
- if(i==7){wei7(100);} //扫描到第七位的时候进入子程序。
-
- delayms(1);
- }
- }
- }
复制代码 程序用keil编译,下载之后正常运行,0~6位数码管依次显示数字0~6,第七位数码管循环显示0~F。但是当我去掉wei7子程序中while(1){}和break之后(就是改成下面的样子),第七位数码管一直显示0,但是到了本来该变换数字的时刻会跳动一下,请问有什么区别啊,为何不能去掉?谢谢~
=================================
void wei7(uint n) //第七位数码管独立显示0-F
{
uchar x,count;
count++;
if(count==n) //每扫描n次,第七位数码管显示x+1
{
x++;P0=table[x];count=0;if(x==16){x=0;}
}
P0=table[x]; //如果不够n次,就继续显示x
}
================================
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|