1
电路图在附件里谢谢了
1、为什么去掉主函数中的delay_100ms的那句话数码绘显示乱码?还有为啥我没给P3.7低电压就可以控制数码管?
////////////////////////////////////////////////////////////////////////
//function:led灯静态显示
//author:zhaocheng
//date:01/25/2013
///////////////////////////////////////////////////////////////////////
#include
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchar table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
/////////////////////////////////////////////////////////////////////////
//function:延迟函数,延迟s*100ms
//input:s(unchar)(延时s*100ms)
//output:null
//author:zhaocheng
//date:01/24/2013
////////////////////////////////////////////////////////////////////////
void delay_100ms(uchar s)
{
uchar x,y,z;
for(x=s;x>0;x--)
for(y=249;y>0;y--)
for(z=2;z>0;z--);
}
void main()
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P0=table[i];
P2=i;
delay_100ms(1);//如果将这一行注释掉,数码管会显示乱码?为何
}
}
}
2、在每次一来回的最后一个灯亮后。为何第一个灯会亮?不该直接是倒数第二个灯亮吗?
实际亮灯顺序如下
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001
10000000//这里为何?
00000010
00000100
#include
#include
#define uchar unsigned char
#define uint unsigned int
/////////////////////////////////////////////////////////////////////////
//function:延迟函数,延迟s*100ms。适用于12MHz的晶振频率
//input:s(unchar)(延时s*100ms)
//output:null
//author:zhaocheng
//date:01/24/2013
////////////////////////////////////////////////////////////////////////
void delay_100ms(uchar s)
{
unsigned char x,y,z;
for(x=s;x>0;x--)
for(y=249;y>0;y--)
for(z=200;z>0;z--);
}
void main()
{
uchar led=0xfe;//led灯,控制led灯的亮灭
char flag=1;//控制灯的流动方向
while(1)
{
if(led==0x7f)
flag=-flag;
if(flag==1)
{
P0=led;
buzzer=0;
delay_100ms(10);
led=_crol_(led,1);
P0=0xff;
buzzer=1;
delay_100ms(10);
}
else
{
P0=led;
buzzer=0;
delay_100ms(10);
led=_cror_(led,1);
P0=0xff;
buzzer=1;
delay_100ms(10);
}
}
}
3、为什么刚刚开始的时候灯会全亮?
////////////////////////////////////////////////////////////////////////
//function:用8个发光管演示出8位二进制数累加过程
//author:zhaocheng
//date:01/24/2013
///////////////////////////////////////////////////////////////////////
#include
#include
#define uchar unsigned char
#define uint unsigned int
/////////////////////////////////////////////////////////////////////////
//function:延迟函数,延迟s*100ms。适用于12MHz的晶振频率
//input:s(unchar)(延时s*100ms)
//output:null
//author:zhaocheng
//date:01/24/2013
////////////////////////////////////////////////////////////////////////
void delay_100ms(uchar s)
{
unsigned char x,y,z;
for(x=s;x>0;x--)
for(y=249;y>0;y--)
for(z=200;z>0;z--);
}
void main()
{
uint num=0x00;//数字累加
while(1)
{
P0=(256-num++);
delay_100ms(100);
}
}
|
|