实验2 并行IO口的使用(包涵程序答案) 下载本文

内容发布更新时间 : 2024/5/3 8:46:46星期一 下面是文章的全部内容请认真阅读。

实验二 并行I/O端口的应用一

一、实验目的

1.进一步熟悉Kiel C软件的使用方法。 2.掌握proteus软件的使用方法。 3.熟悉C语言数据与运算 4.熟悉C语言程序结构 二、实验内容

1.程序一:当按下按键K1~K4时,对应D1~D4点亮。 2.程序二:用循环语句实现P0口的多值输出。 3.程序三:用数组方式控制跑马灯。

4.程序四:在P2口连接的LED数码管上循环显示“0”,“1”,“2”,“3”,“4”。 三、实验仿真硬件图

在Proteus软件中建立如下图2-1所示仿真模型并保存。需要注意的是,当用Proteus来绘制比较复杂的电路时,经常会因为线太乱而影响美观,也不方便检查,使用总线方式绘制电路能很好地避免这一问题。

R2220R3220R4220R5220R6220R7220R8220R9220P0.0P0.1P0.2P0.3P0.4P0.5P0.6C330uFU1P0.0P0.1P0.2P0.3P0.4P0.5P0.612M18XTAL2C230uFP0.7X119XTAL1R110k9RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P0.7D8LED-BIBYC422pF293031PSENALEEAD1D2D3D4D5D6D7K1K2K3K412345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51P2.0P2.1P2.2P2.3P2.4P2.5P2.6 图2-1 并行I/O端口应用原理图

在单线上点击右键编辑属性。在线型中选择“BUS WIRE”,画出所需要的总线,连分支线时,不要直接画到总线上,先将光标靠近上面画的单线的末端(离总线近的一段),光标会出现一个选中的符号,先单击左键,再按住Ctrl键,拖动鼠标到总线的合适位置,再点击左键。然后右键点击分支线,放置网络标号即可。

四、编程提示

程序一:⒈可选用用if语句、if-else-if语句、switch语句来实现当按下按键K1~K4时,对应D1~D4点亮。

if语句的一般形式:

if ( 表达式1 ) {

语句组1; }

if ( 表达式 2) {

语句组2; }

...

if-else-if语句的一般形式:

if ( 表达式 1) {

语句组1; }

else if( 表达式 2) {

语句组2; }

...

else if( 表达式 n) {

语句组n; } else {

语句组n+1; }

switch语句的一般形式为:

switch(表达式)

{

case常量表达式1: 语句序列1;break; case常量表达式2: 语句序列2;break; ...

case常量表达式n: 语句序列n;break; default : 语句序列n+1 }

2.可采用运用三种基本的循环语句: for语句、while语句和do-while语句,实现D1~D8循环点亮。

for语句的一般形式:

for ( 循环变量赋初值;循环条件;修改循环变量 ) {

语句组; //循环体

}

while语句的一般形式:

while ( 表达式 ) {

语句组; //循环体 }

do-while语句的一般形式:

do {

语句组; //循环体 }while ( 表达式 );

3程序三:用数组方式控制跑马灯。将跑马灯的全部状态用数组表达,然后用循环语句依次读取数组各元素,送P0口显示。

4.程序四:在P1口连接的LED数码管上循环显示“0”,“1”,“2”,“3”,“4”。 思路同程序一,只不过数组元素是由共阴极数码管所对应的字形码所组成。

写出源程序,并注释

#include //文件包含语句,定义MCS-51单片机特殊功能寄存器

void main() //主函数 {

P0=0x00; //置P0口为0

while(1) {

P1=0x0f; //P1口写1

if((P1&0x0f)==0x0e) P0=0x01; if((P1&0x0f)==0x0d) P0=0x02; if((P1&0x0f)==0x0b) P0=0x04;

if((P1&0x0f)==0x07) P0=0x08; //屏蔽P1引脚的高四位,将高四位清零后输出 } }

#include void delay(unsigned char i); void main() {

unsigned char a,b; while(1) {

P0=0x00; delay(250); b=0x01; for(a=0;a<8;a++) { P0=b; delay(250); b<<=1; } } }

void delay(unsigned char i) {

unsigned char j,k; for(k=0;k

#include void main(void) { int i,j;

char code led[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; while (1) {

for (i=0;i<8;i++) {

P0=led[i];

for(j=0;j<20000;j++); }

} }

#include void delay(unsigned char i); void main(void) {

unsigned char i;

char code led[8]={0x3f,0x06,0x5b,0x4f,0x66}; while(1) {

for(i=0;i<5;i++) {

P2=led[i]; delay(1000); } } }

void delay(unsigned char i) {

unsigned char j,k; for(k=0;k

实验二 并行I/O端口的应用一(模板)

学院: 专业: 年级: 实验时间: 姓名: 学号: 指导教师: 一、实验目的

1.进一步熟悉Kiel C软件的使用方法。 2.掌握proteus软件的使用方法。 3.熟悉C语言数据与运算