单片机期末考试编程题.docx

上传人:b****4 文档编号:4453640 上传时间:2022-12-01 格式:DOCX 页数:21 大小:17.09KB
下载 相关 举报
单片机期末考试编程题.docx_第1页
第1页 / 共21页
单片机期末考试编程题.docx_第2页
第2页 / 共21页
单片机期末考试编程题.docx_第3页
第3页 / 共21页
单片机期末考试编程题.docx_第4页
第4页 / 共21页
单片机期末考试编程题.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机期末考试编程题.docx

《单片机期末考试编程题.docx》由会员分享,可在线阅读,更多相关《单片机期末考试编程题.docx(21页珍藏版)》请在冰豆网上搜索。

单片机期末考试编程题.docx

单片机期末考试编程题

/***************************************

实验题目要求:

P23-P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。

时间:

2012年12月21日

程序撰写者:

邹康

*****************************************/

#include

voiddelay(unsignedintt)//软延时大致时间为1ms

{

unsignedinta,b;

for(a=0;a

for(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;a

for(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;a

for(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;a

for(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;a

for(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;

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);

}

}

voidinit()

{

EA=1;

IT0=1;

EX0=1;

}

voidmain()

{

init();

while

(1)

{

switch(mode)

{

case0:

mode_1();break;

case1:

mode_2();break;

case2:

mode_3();break;

}

}

}

voidcome0()interrupt0

{

mode++;

if(mode>2)

mode=0;

}/******************************************

实验题目要求:

采用外部中断的方式实现一个二进制减1计数器,按一次键,减1,

并用4个LED显示计数结果,减至0时,重新从15开始计数。

时间:

2012年12月22日

程序撰写者:

邹康

******************************************/

#include

sbitled0=P2^6;

sbitled1=P2^5;

sbitled2=P2^4;

sbitled3=P2^3;

unsignedcharnum[4];

charnumber=15;

voidinit()

{

EA=1;

IT0=1;

EX0=1;

}

voidnum_change()

{

chari=0,n=0;

n=number;

for(i=0;i<4;i++)

{

num[i]=n%2;

n=n/2;

}

led0=!

num[0];

led1=!

num[1];

led2=!

num[2];

led3=!

num[3];

}

voidmain()

{

init();

while

(1)

{

num_change();

}

}

voidcome0()interrupt0

{

number--;

if(number<0)

number=15;

}/************************************

实验题目要求:

采用外部中断的方式实现用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;a

for(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;

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);

}

}

voidinit()

{

EA=1;

IT0=1;

EX0=1;

}

voidmain()

{

init();

while

(1)

{

switch(mode)

{

case0:

mode_1();break;

case1:

mode_2();break;

case2:

mode_3();break;

}

}

}

voidcome0()interrupt0

{

mode++;

if(mode>2)

mode=0;

}/****************************************

实验题目要求:

设计1个秒计数器,每秒计1次数,在LED上显示出来,计至16清零后重新计数

时间:

2012年12月22日

程序撰写者:

邹康

******************************************/

#include

unsignedintk=0;

charnumber=0;

unsignedcharnum[4];

sbitled0=P2^3;

sbitled1=P2^4;

sbitled2=P2^5;

sbitled3=P2^6;

voidinit()

{

EA=1;

ET0=1;

TMOD=0X01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

}

voidnum_change()

{

unsignedchari=0,n=0;

n=number;

for(i=0;i<4;i++)

{

num[i]=n%2;

n=n/2;

}

led0=!

num[0];

led1=!

num[1];

led2=!

num[2];

led3=!

num[3];

}

voidmain()

{

init();

while

(1)

{

num_change();

}

}

voidtime0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

k++;

if(k>=20)

{

k=0;

number++;

if(number>15)

number=0;

}

}/********************************************

实验题目要求:

在上题基础上用按键控制秒计数器的启停,按一次键开始计数,按2次停止计数,按3次又开始计数…。

时间:

2012年12月22日

程序撰写者:

邹康

********************************************/

#include

sbitled0=P2^3;

sbitled1=P2^4;

sbitled2=P2^5;

sbitled3=P2^6;

sbitkeyz=P2^0;

unsignedcharflag=0;

unsignedchark=0,number=0;

unsignedcharnum[4];

voidinit()

{

EA=1;

ET0=1;

TH0=(65536-50000)%256;

TL0=(65536-50000)/256;

}

voidkey()

{

unsignedintm=0;

if(keyz==0)

{

m++;

if(m>=30)

{

flag=!

flag;

m=0;

}

}

}

voidnum_change()

{

unsignedchari=0,n=0;

n=number;

for(i=0;i<4;i++)

{

num[i]=n%2;

n=n/2;

}

led0=!

num[0];

led1=!

num[1];

led2=!

num[2];

led3=!

num[3];

}

voidmain()

{

init();

while

(1)

{

key();

if(flag==0)

TR0=1;

else

TR0=0;

num_change();

}

}

voidtime0()interrupt1

{

TH0=(65536-50000)%256;

TL0=(65536-50000)/256;

k++;

if(k>19)

{

number++;

if(number>15)

number=0;

k=0;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1