单片机期末考试编程题.docx
《单片机期末考试编程题.docx》由会员分享,可在线阅读,更多相关《单片机期末考试编程题.docx(22页珍藏版)》请在冰豆网上搜索。
![单片机期末考试编程题.docx](https://file1.bdocx.com/fileroot1/2022-10/27/de5a172e-6af5-44c8-bb64-34a4a71eafc4/de5a172e-6af5-44c8-bb64-34a4a71eafc41.gif)
单片机期末考试编程题
单片机期末考试编程题
/***************************************
实验题目要求:
P23-P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。
时间:
2012年12月21日
程序撰写者:
邹康
*****************************************/
#include
voiddelay(unsignedintt)//软延时大致时间为1ms
{
unsignedinta,b;
for(a=0;afor(b=0;b<120;b++);
}
voidmain()
{
while
(1)
{
P2=~P2;
delay(1000);//延时1s
}
}/*********************************************************
实验题目要求:
P23-P26口做输出口,接发光二极管,编写并调试跑马灯程序。
时间:
2012年12月21日
程序撰写者:
邹康
***********************************************************/
#include
voiddelay(unsignedintt)//延时1ms左右
{
unsignedinta,b;
for(a=0;afor(b=0;b<120;b++);
}
voidmain()
{
unsignedchari=0,m=0;
while
(1)
{
for(i=0;i<4;i++)//向左移动
{
P2=~(0x08<
delay(1000);
}
m=~P2;
for(i=0;i<4;i++)//向右移动
{
P2=~(m>>i);
delay(1000);
}
}
}/*********************************
实验题目要求:
设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。
时间:
2012年12月21日
程序撰写者:
邹康
**********************************/
#include
sbitkey1=P2^0;
sbitLED0=P2^6;//单片机板子最右边的led灯
sbitLED1=P2^5;//右边数第二个灯
sbitLED2=P2^4;//右边数第三个灯
sbitLED3=P2^3;//右边数第四个灯
charnumber=15;
unsignedcharnum[4];
voidkey()//通过按键对NUMBER的数值进行减计数
{
staticunsignedcharm=0;
if(key1==0)
{
m++;
if(m>=30)
{
number--;
if(number<0)
number=15;
m=0;
}
}
}
voidnumber_change()//将十进制转换为二进制
{
unsignedintn=0;
unsignedcharj=0;
n=number;
for(j=0;j<4;j++)
{
num[j]=n%2;
n=n/2;
}
}
voidshow()//通过LED将二进制显示出来
{
LED0=!
num[0];
LED1=!
num[1];
LED2=!
num[2];
LED3=!
num[3];
}
voidmain()
{
while
(1)
{
key();
number_change();
show();
}
}/*******************************************
实验题目要求:
用1个按键控制LED的显示,要求显示3种以上的不同模式。
时间:
2012年12月22日
程序撰写者:
邹康
********************************************/
#include
sbitled0=P2^3;
sbitled1=P2^4;
sbitled2=P2^5;
sbitled3=P2^6;
sbitmode_key=P2^0;
charmode=0;
voiddelay(unsignedintt)//延时时间大约1ms
{
unsignedinta,b;
for(a=0;afor(b=0;b<120;b++);
}
voidkey()//通过按键进行模式选择
{
staticunsignedcharm;
if(mode_key==0)
{
m++;
if(m>=30)
{
mode++;
if(mode>=3)
mode=0;
m=0;
}
}
}
voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右
{
unsignedchari=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
c=~(0x08<
P2&=c;
delay(1000);
}
}
voidmode_2()//模式二根据开发板,LED一闪一灭,时间间隔1s左右
{
led0=0;
led1=0;
led2=0;
led3=0;
delay(1000);
led0=1;
led1=1;
led2=1;
led3=1;
delay(1000);
}
voidmode_3()//模式三,先循环右移,再循环左移,时间间隔1s左右
{
unsignedchari=0,n=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x08<
delay(1000);
}
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x40>>i);
delay(1000);
}
}
voidmain()
{
while
(1)
{
key();
switch(mode)
{
case0:
mode_1();break;
case1:
mode_2();break;
case2:
mode_3();break;
}
}/*******************************************
实验题目要求:
用1个按键控制LED的显示,要求显示3种以上的不同模式。
时间:
2012年12月22日
程序撰写者:
邹康
********************************************/
#include
sbitled0=P2^3;
sbitled1=P2^4;
sbitled2=P2^5;
sbitled3=P2^6;
sbitmode_key=P2^0;
charmode=0;
voiddelay(unsignedintt)//延时时间大约1ms
{
unsignedinta,b;
for(a=0;afor(b=0;b<120;b++);
}
voidkey()//通过按键进行模式选择
{
staticunsignedcharm;
if(mode_key==0)
{
m++;
if(m>=30)
{
mode++;
if(mode>=3)
mode=0;
m=0;
}
}
}
voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右
{
unsignedchari=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
c=~(0x08<
P2&=c;
delay(1000);
}
}
voidmode_2()//模式二根据开发板,LED一闪一灭,时间间隔1s左右
{
led0=0;
led1=0;
led2=0;
led3=0;
delay(1000);
led0=1;
led1=1;
led2=1;
led3=1;
delay(1000);
}
voidmode_3()//模式三,先循环右移,再循环左移,时间间隔1s左右
{
unsignedchari=0,n=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x08<
delay(1000);
}
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x40>>i);
delay(1000);
}
}
voidmain()
{
while
(1)
{
key();
switch(mode)
{
case0:
mode_1();break;
case1:
mode_2();break;
case2:
mode_3();break;
}
}
}
}/************************************
实验题目要求:
采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。
时间:
2012年12月22日
程序撰写者:
邹康
*************************************/
#include
sbitled0=P2^3;
sbitled1=P2^4;
sbitled2=P2^5;
sbitled3=P2^6;
unsignedcharmode=0;
voiddelay(unsignedintt)//延时时间大约1ms
{
unsignedinta,b;
for(a=0;afor(b=0;b<120;b++);
}
voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右
{
unsignedchari=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
c=~(0x08<
P2&=c;
delay(1000);
}
}
voidmode_2()//模式二根据开发板,LED一闪一灭,时间间隔1s左右
{
led0=0;
led1=0;
l