实验2并行IO口的使用(包涵程序答案).doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二并行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来绘制比较复杂的电路时,经常会因为线太乱而影响美观,也不方便检查,使用总线方式绘制电路能很好地避免这一问题。
图2-1并行I/O端口应用原理图
在单线上点击右键编辑属性。
在线型中选择“BUS WIRE”,画出所需要的总线,连分支线时,不要直接画到总线上,先将光标靠近上面画的单线的末端(离总线近的一段),光标会出现一个选中的符号,先单击左键,再按住Ctrl键,拖动鼠标到总线的合适位置,再点击左键。
然后右键点击分支线,放置网络标号即可。
四、编程提示
程序一:1.可选用用if语句、if-else-if语句、switch语句来实现当按下按键K1-K4时, 对应D1-D4点亮。
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 (循环变量赋初值;循环条件;修改循环变量)
P0=0x01; P0=0x02; P0=0x04; P0=0x08; 〃屏蔽Pl 引脚的高四位,将高四位
语句组;//循环体
}
while 语句的一般形式:
wh 订e (表达式)
{
语句组;//循环体
}
do-while 语句的一般形式:
do
{
语句组;//循环体
}while (表达式);
3程序三:用数组方式控制跑马灯。
将跑马灯的全部状态用数组表达,然后用循环语句依次 读取数组各元素,送P0 口显示。
4.程序四:在P1 口连接的LED 数码管上循环显示“0”,“1”,“2”,“3”,“4”。
思 路同程序一,只不过数组元素是由共阴极数码管所对应的字形码所组成。
写出源程序,并注释
include <reg51.h>
〃文件包含语句,定义MCS-51单片机特殊功能寄存器
void main() 〃主函数
{ P0=0x00;//置P0 口为0
while(l)
{
Pl=0x0f; //P1 口写1
if((Pl&0 x0f)==0x0e)
if((Pl&0 x0f)==0x0d)
if((Pl&0 x0f)==0x0b)
if((Pl&0 x0f)==0x07) 输出
#include <reg51.h>
void delay(unsigned char i);
void main()
unsigned char a,b; while(l)
{
P0=0x00;
delay (250);
b=0x01; for(a=0;a<8;a++)
{
P0=b; delay(250); b«=l;
}
}
}
void delay(unsigned char i) {
unsigned char j,k; for(k=0;k<i;k++) for(j=0;j<255;j++);
#include<reg51.h>
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];
fora=0;j<20000;j++);
#include<reg5 l.h>
void delay(unsigned char i);
void main(void)
{
unsigned char i;
char code led[8]={0x3f,0x06,0x5b,0x4f,0x66}; while(l) {
for(i=0;i<5;i++)
{
P2=led[i]; delay(lOOO);
}
}
}
void delay(unsigned char i)
{
unsigned char j,k;
for(k=0;k<i;k++)
for(j=0;j<255;j++);
实验二并行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所示仿真模型并保存。
图2-1并行I/O端口应用原理图
四、实验程序清单(附主要语句注释)
1)程序一
2)程序二
3)程序三
4)程序四
五、简答题
1)程序中如何设定P1.0为输入端口,为什么?2)P0 口与数码管之间的电阻起什么作用?
3)RST端的电路起什么作用?
4)EA接电源是什么意思?
5)XTAL1、XTAL2接的电路起什么作用?六、体会。