任务和程序.docx
《任务和程序.docx》由会员分享,可在线阅读,更多相关《任务和程序.docx(16页珍藏版)》请在冰豆网上搜索。
任务和程序
任务1:
控制8个发光二极管闪烁
#include//包含头文件REG51.H,定义了MCS-51单片机的特殊功能寄存器
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
while
(1){
P1=0x00;//将P1口的八位引脚清0,点亮八个LED
delay(200);//延时
P1=0xff;//将P1口的八位引脚置1,熄灭八个LED
delay(200);//延时
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务2:
模拟汽车转向灯控制程序
P3口状态
驾驶员发出的命令
P3.0
P3.1
1
1
驾驶员未发出命令
1
0
驾驶员发出左转指示
0
1
驾驶员发出右转指示
0
0
驾驶员发出故障显示命令
#include
sbitP1_0=P1^0;//定义P1.0引脚位名称为P1_0
sbitP1_1=P1^1;//定义P1.1引脚位名称为P1_1
sbitP3_0=P3^0;//定义P3.0引脚位名称为P3_0
sbitP3_1=P3^1;//定义P3.1引脚位名称为P3_1
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
bitleft,right;//定义位变量left、right表示左、右状态
while
(1){//while循环语句,由于条件一直为真,该语句为无限循环
left=P3_0;//读取P3.0引脚的(左转向灯)状态并赋值给left
right=P3_1;//读取P3.1引脚的(右转向灯)状态并赋值给right
P1_0=left;//将left的值送至P1.0引脚
P1_1=right;//将right的值送至P1.1引脚
delay(200);//调用延时函数,实际参数为200
P1_0=1;//将P1.0引脚置1输出(熄灭LED)
P1_1=1;//将P1.1引脚置1输出(熄灭LED)
delay(200);//调用延时函数,实际参数为200
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务3:
采用if语句实现的模拟汽车转向灯控制程序
P3口状态
驾驶员发出的命令
P3.0
P3.1
1
1
驾驶员未发出命令
1
0
驾驶员发出左转指示
0
1
驾驶员发出右转指示
0
0
驾驶员发出故障显示命令
#include
sbitP1_0=P1^0;//定义P1.0引脚位名称为P1_0
sbitP1_1=P1^1;//定义P1.1引脚位名称为P1_1
sbitP3_0=P3^0;//定义P3.0引脚位名称为P3_0
sbitP3_1=P3^1;//定义P3.1引脚位名称为P3_1
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
while
(1){//while循环
if(P3_0==0)P1_0=0;//如果P3.0(左转向灯)状态为0,则点亮左转灯
if(P3_1==0)P1_1=0;//如果P3.1(右转向灯)状态为1,则点亮右转灯
delay(200);//延时
P1_0=1;//左转灯回到熄灭状态
P1_1=1;//右转灯回到熄灭状态
delay(200);//延时
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务4:
采用if-else-if语句实现的模拟汽车转向灯控制程序
P3口状态
驾驶员发出的命令
P3.0
P3.1
1
1
驾驶员未发出命令
1
0
驾驶员发出左转指示
0
1
驾驶员发出右转指示
0
0
驾驶员发出故障显示命令
#include//包含头文件REG51.H
sbitP1_0=P1^0;//定义P1.0引脚位名称为P1_0
sbitP1_1=P1^1;//定义P1.1引脚位名称为P1_1
sbitP3_0=P3^0;//定义P3.0引脚位名称为P3_0
sbitP3_1=P3^1;//定义P3.1引脚位名称为P3_1
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
while
(1){//while循环
if(P3_0==0&&P3_1==0)//如果P3.0和P3.1状态都为0
{P1_0=0;//则点亮左转灯和右转灯
P1_1=0;
delay(200);
}
elseif(P3_0==0)//如果P3.0(左转向灯)状态为1
{P1_0=0;//则点亮左转灯
delay(200);
}
elseif(P3_1==0)//如果P3.1(右转向灯)状态为1
{P1_1=0;//则点亮右转灯
delay(200);
}
else
{
;//空语句
}
P1_0=1;//左转灯回到熄灭状态
P1_1=1;//右转灯回到熄灭状态
delay(200);
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务5:
采用switch语句实现的模拟汽车转向灯控制程序
P3口状态
驾驶员发出的命令
P3.0
P3.1
1
1
驾驶员未发出命令
1
0
驾驶员发出左转指示
0
1
驾驶员发出右转指示
0
0
驾驶员发出故障显示命令
#include//包含头文件REG51.H
sbitP1_0=P1^0;
sbitP1_1=P1^1;
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
unsignedcharledctr;//定义转向灯控制变量ledctr
P3=0xff;//P3口作为输入口,必须先置全1
while
(1){
ledctr=P3;//读P3口的状态送到ledctr
ledctr=ledctr&0x03;//与操作,屏蔽掉高6位无关位,取出P3.0和P3.1引脚的状态(0x03即二进制数00000011B)
switch(ledctr)
{
case0:
P1_0=0;P1_1=0;break;//如P3.0、P3.1都为0则点亮左、右灯
case1:
P1_1=0;break;//如果P3.1(右转向灯)为0则点亮右灯
case2:
P1_0=0;break;//如果P3.0(左转向灯)为0则点亮左灯
default:
;//空语句,什么都不做
}
delay(200);//延时
P1_0=1;//左转灯回到熄灭状态
P1_1=1;//右转灯回到熄灭状态
delay(200);//延时
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务6:
采用顺序结构实现的流水灯控制程序
#include
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
while
(1){
P1=0x01;//点亮第1个发光二极管
delay(200);//延时
P1=0x02;//点亮第2个发光二极管
delay(200);//延时
P1=0x04;//点亮第3个发光二极管
delay(200);//延时
P1=0x08;//点亮第4个发光二极管
delay(200);//延时
P1=0x10;//点亮第5个发光二极管
delay(200);//延时
P1=0x20;//点亮第6个发光二极管
delay(200);//延时
P1=0x40;//点亮第7个发光二极管
delay(200);//延时
P1=0x80;//点亮第8个发光二极管
delay(200);//延时
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务7:
采用循环结构实现的流水灯控制程序
#include//包含头文件REG51.H
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
unsignedchari,w;
while
(1)
{
w=0x01;//信号灯显示字初值为01H
while(w)
{
P1=w;//显示字取反后,送P1口
delay(200);//延时
w<<=1;//显示字左移一位
}
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务8:
采用数组实现的流水灯控制程序
#include//包含头文件REG51.H
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
unsignedchari;
unsignedchardisplay[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
while
(1){
for(i=0;i<8;i++)
{
P1=display[i];//显示字送P1口
delay(200);//延时
}
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务9:
用4个按键控制8只发光二极管的显示,
按下S1键,D3、D4灯亮;
按下S2键,D2、D5灯亮;
按下S3键,D1、D6灯亮;
按下S4键,D0、D7灯亮;
不按键,D2、D3、D4、D5灯亮;
注:
发光二极管高电平点亮,输入高电平表示有键按下;S1—S4接P3.0—P3.3;
L0—L7接P1.0—P1.7。
#include
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
unsignedcharledctr;
P3=0xff;
while
(1){
ledctr=P3;
ledctr=ledctr&0X0F;
switch(ledctr)
{
case1:
P1=0x18;break;//按下S1键,D3、D4灯亮;
case2:
P1=0x24;break;//按下S2键,D2、D5灯亮;
case4:
P1=0x42;break;//按下S3键,D1、D6灯亮;
case8:
P1=0x81;break;//按下S4键,D0、D7灯亮;
case0:
P1=0x3c;break;//不按键,D2、D3、D4、D5灯亮;
default:
P1=0x00;
}
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
任务10:
简易密码锁程序
四个按键输入密码,8个发光二极管显示输入的密码和是否开门的信号
P3.0—P3.3接S0—S3,开关按下为低电平;
P1.0---P1.7接L0—L7,高电平灯亮。
S0按下时,灯L0显示,其余灯灭,延时1S后灯L6亮表示密码错误,该状态保持3S;
S1按下时,灯L1显示,其余灯灭,延时1S后灯L6亮表示密码错误,该状态保持3S;
S2按下时,灯L2显示,其余灯灭,延时1S后灯L6亮表示密码错误,该状态保持3S;
S3按下时,灯L3显示,其余灯灭,延时1S后灯L7亮,表示密码正确,开门,该状态保持3S;
#include
sbitP3_0=P3^0;//控制开锁,用发光二极管代替
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
unsignedcharbutton;//保存按键信息
unsignedcharcodetab[7]={0x01,0x02,0x04,0x08,0x40,0x80,0x00};//定义显示段码表,分别对应显示字符:
0、1、2、3,-、E、P
P3=0xff;//读P0口引脚状态,需先置全1
while
(1){
button=P3;//读取P0口上的按键状态并赋值到变量button
button&=0x0f;//采用与操作保留低4位的按键状态,其他位清0
switch(button)//判断按键的键值
{
case0x0e:
P1=tab[4];delay(400);P1=tab[5];break;//0#键按下,密码输入错误,L6亮。
case0x0d:
P1=tab[1];delay(400);P1=tab[5];break;/1#键按下,密码输入错误,L6亮。
case0x0b:
P1=tab[2];delay(400);P1=tab[5];break;//2#键按下,密码正确,L6亮。
case0x07:
P1=tab[3];delay(400);P1=tab[4];break;//3#键按下,密码输入错误,L7亮。
}
delay(1200);//显示状态停留约3秒
}
}
//函数名:
delay
//函数功能:
实现软件延时
//形式参数:
unsignedchari;
//i控制空循环的外循环次数,共循环i*255次
//返回值:
无
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}
项目二验收要求:
用if-else-if语句和switch语句实现下列功能:
4个按键控制8个发光二极管的显示,要求:
(1)单独按下S1键,L0--L3亮;
(2)单独按下S2键,L4--L7亮;
(3)单独按下S3键,L2--L5亮;
(4)单独按下S4键,L1--L6亮;
(5)无键按下,L0--L7亮;
(6)其他情况,L0--L7都不亮;
注:
S1--S4按键接P3.1--P3.4,按下为低电平;灯L0--L7接P1.0--P1.7
if-else-if语句程序
#include
sbitS1=P3^1;
sbitS2=P3^2;
sbitS3=P3^3;
sbitS4=P3^4;
voiddelay(unsignedchari);
voidmain()
{
while
(1)
{
if(!
S1&&S2&&S3&&S4){P1=0x0f;}
elseif(S1&&!
S2&&S3&&S4){P1=0xf0;}
elseif(S1&&S2&&!
S3&&S4){P1=0x3c;}
elseif(S1&&S2&&S3&&!
S4){P1=0x7e;}
elseif(S1&&S2&&S3&&S4){P1=0xff;}
else{P1=0x00;}
delay(200);
}
}
voiddelay(unsignedchari)
{
unsignedcharj,k;
for(k=0;k
for(j=0;j<255;j++);
}
Switch语句程序
#include
voiddelay(unsignedchari);//延时函数声明
voidmain()//主函数
{
unsignedcharledctr;//保存按键信息
P3=0xff;//读P0口引脚状态,需先置全1
while
(1){
ledctr=P3;//读取P0口上的按键状态并赋值到变量ledctr
ledctr&=0x0f;//采用与操作保留低4位的按键状态,其他位清0
switch(ledctr)//判断按键的键值
{
case0x0e:
P1=0x0f;break;
case0x0d:
P1=0xf0;break;
case0x0b:
P1=0x3c;break;
case0x07:
P1=0x7e;break;
case0x00:
P1=0xff;break;
default:
P1=0x00;
}
delay(200);//显示状态停留约3秒
}
}
voiddelay(unsignedchari)//延时函数,无符号字符型变量i为形式参数
{
unsignedcharj,k;//定义无符号字符型变量j和k
for(k=0;k
for(j=0;j<255;j++);
}