单片机系统设计方案文档格式.docx
《单片机系统设计方案文档格式.docx》由会员分享,可在线阅读,更多相关《单片机系统设计方案文档格式.docx(55页珍藏版)》请在冰豆网上搜索。
121;
y++);
//使用两个嵌套的for语句来实现延时,先赋值x=0,判断一下x<
z,若为真则执行下一个for语句,赋值y=0,判断一下y<
121,若为真则执行下一条,若无下一条则执行y++,直到y<
121为假,则在执行x++,在判断一下x<
z,若为真则再执行一次y的for语句,为假则跳出循环,结束。
}
voidmain()//定义主函数
P2_1=0;
//将P2-1口赋值为0,即给予P2_1一个低电平,在电路中led灯另一端接VCC高电平,给一低电平即将LED灯导通,使其亮。
2.2Keil仿真
2.3Protues仿真
三、流水灯循环点亮
3.1原理介绍
3.2程序代码
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint//加黑的都是定义头文件
voidDelayMS(uintx)
//延时
{
uchari;
while(x--)
for(i=0;
i<
120;
i++);
//采用for循环来实现延时
}
voidmain()
//主程序
P2=0x01;
while
(1)
7;
i++)
//i=0,判断i<
7,再执行P2=_crol_(P2,1),之后再执行i++
P2=_crol_(P2,1);
//以位的形式将P2左循环移动1位
DelayMS(150);
i++)
//i=0,判断i<
P2=_cror_(P2,1);
//以位的形式将P2右循环移动
1位
}//利用循环移位函数_crol_(左循环)和_cror_(右循环)形成来回滚动的效果
a
=
0xA5;
b
_crol_(a,1);
/*
now
is
0xD2
*/
unsigned
char
_crol_
(unsigned
c,
b);
//
使无符号字符循环向左移b位
_cror_
使无符号字符循环向右移动b位
功
能:
_crol_,_irol_,_lrol_以位形式将变量val循环左移n位。
3.3Keil结果展示
3.4protues仿真
四、心形灯闪烁
4.1程序代码
#include<
REGX52.H>
#defineucharunsignedchar
ucharcodetable0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}//LED从低位往高位移
ucharcodetable1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//LED从高位往低位移
ucharcodetable2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
//LED从1个亮到8个都点亮(低位往高位移)
ucharcodetable3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
//LED从1个亮到8个都亮(高位往低位移)
ucharcodetable4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
//led从8个全亮到一个不亮(从低位到高位)
ucharcodetable5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
//led从8个全亮到一个不亮(从高位到低位)
ucharcodetable6[]={0xfe,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e};
//从低位往高位移(最低位始终为0)
ucharcodetable7[]={0x7f,0x3f,0x5f,0x6f,0x77,0x7b,0x7d,0x7e};
//从高位往低位移(最高位始终为0)
uchari,j;
//定义循环变量
uinttt=70;
//定义时间函数
voiddelay(uinttime)//定义延时函数
{
uintx,y;
for(x=time;
x>
0;
x--)
for(y=110;
y>
y--);
//使用两个嵌套的for语句来实现延时
}
voiddisp0()//定义状态0所有led灯闪烁3次
for(i=0;
3;
i++)//for循环
P0=0x00;
P2=0x00;
P3=0x00;
P1=0x00;
//led灯一端接VCC,另一端使P0/P1/P2/P3为0即低电平,则led灯导通,led亮
delay(300);
P0=0xff;
P2=0xff;
P3=0xff;
P1=0xff;
//led灯一端接VCC,另一端使P0/P1/P2/P3为0即高电平,则led灯截止,led灭
//整个状态实现了led灯的亮灭闪烁3次
voiddisp1()//状态1LED逆时针转一圈
8;
i++)
P2=table1[i];
//table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
LED从高位往低位移(P2.8为高位,结合图可知)
delay(100);
//给P2高电平,P2截止,P2全灭
P3=table1[i];
//LED从高位往低位移(P3.8为高位,结合图可知)
//给P3高电平,P3截止,P3全灭
P1=table1[i];
//LED从高位往低位移(P3.8为高位,结合图可知)
//给P1高电平,P1截止,P1全灭
i++)
P0=table0[i];
//table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}LED从低位往高位移
P0=0xff;
//给P0高电平,P0截止,P0全灭
voiddisp2()//状态2LED顺时针转一圈
P0=table1[i];
P1=table0[i];
P3=table0[i];
P2=table0[i];
voiddisp3()//状态34个LED灯同时顺时、逆时针移动1/4圈
//P0组LED从高位往低位移
//P1组LED从高位往低位移
//P2组LED从高位往低位移
//P3组LED从低位往高位移
//P0组LED从低位往高位移
//P1组LED从低位往高位移
//P2组LED从低位往高位移
//P3组LED从高位往低位移
//P3,P0全组都灭
voiddisp4()//状态42个LED同时顺时针移动半圈
//P1组LED从高位往低位移
//P3组LED从高位往低位移
//P0组LED从低位往高位移
voiddisp5()//状态52个LED同时逆时针移动半圈
//P0组LED从高位往低位移
//P3组LED从低位往高位移
//P1组LED从低位往高位移
//P2组LED从低位往高位移
//P1,P2全组都灭
voiddisp6()//状态6LED自上而下逐渐点亮(一半点亮一半不亮)
P0=table3[i];
P2=table3[i];
P1=table2[i];
P3=table3[i];
//LED从1个亮到8个都点亮(高位往低位移)
voiddisp7()//状态7LED自下而上逐渐点亮(直到全部点亮)
P1=table3[i];
P3=table2[i];
//LED从1个亮到8个都点亮(低位往高位移)delay(100);
P0=table2[i];
P2=table2[i];
voiddisp8()//状态8间隔8格的4个LED亮并逆时针旋转
for(j=0;
j<
2;
j++)
for(i=0;
{
P0=table1[i];
P2=table0[i];
P1=table0[i];
P3=table0[i];
delay(100);
}
voiddisp9()//状态9间断8格的led亮,再逆时针逐渐点亮(直到全部点亮)
delay(500);
voiddisp10()//状态10从led全部亮到全不亮(间隔8格的4个led开始逆时针熄灭)
9;
P0=table5[i];
P2=table4[i];
//led从8个全亮到一个不亮(从低位到高位)
P1=table4[i];
P3=table4[i];
delay(300);
voiddisp11()//状态11间隔8格的4个LED亮并顺时针旋转
P0=table0[i];
P2=table1[i];
P1=table1[i];
P3=table1[i];
voiddisp12()
delay(1000);
voiddisp13()
P0=table4[i];
P2=table5[i];
P1=table5[i];
P3=table5[i];
voiddisp14()
voiddisp15()
voiddisp16()
5;
P0=0xaa;
P1=0xaa;
P2=0xaa;
P3=0xaa;
P0=~P0;
P1=~P1;
P2=~P2;
P3=~P3;
delay(200);
voiddisp17()
}
/*******************************/
delay(50);
voiddisp18()
voiddisp19()
voiddisp20()
voiddisp21()
voiddisp22()
{
P2=t