单片机并行口实验报告
实验二 并行口
实验报告
班级: 学号: 姓名: 教师:
一、实验目的
通过实验了解8051并行口输入方式和输出方式的工作原理及编程方法。
二、实验内容
1、输出实验
如图4-1所示。以8031的P2口为输出口。通过程序控制发光二极管的亮灭。
2、输入实验
如图4-1所示。以8031的P1口为输入口。用开关向P1.0~P1.3输入不同的状态,控制P2口P2.4~P2.7发光二极管的亮灭。
3、查询输入输出实验 如图1-1所示。以8051的P1.6或P1.0为输入位,以P2口为输出,二进制计数记录按键的次数。
图1-1
三、编程提示
1、输出实验程序
(1)设计一组显示花样,编程使得P2口按照设计的花样重复显示。
(2)为了便于观察,每一状态加入延时程序。
2、输入实验程序
开关打开,则输入为1;开关闭合,则输入为0。读取P1.0~ P1.3的状态,并将它们输出到P2.4~ P2.7,驱动发光二极管。所以发光二极管L1~L4的亮灭应与开关P1.0~ P1.3的设置相吻合。
3、查询输入输出程序
(1)编程计数P1.0按键次数,按键不去抖动。
(2)编程计数P1.6按键次数,按键不去抖动。
(3)编程计数P1.0按键次数,按键软件延时去抖动。
观察(1)、(2)、(3)、的结果。
四、实验器材
计算机,目标系统实验板
五、实验步骤
1、在KEILC中按要求编好程序,编译,软件调试,生成.HEX文件。
2、断开电源,按图1-1所示,连好开关及发光二极管电路。
3、下载程序。
4、调试运行程序,观察发光二极管状态。
六、C源程序清单
1、#include #define uchar unsigned char #define ON 0 #define OFF 1 sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void delay1(void); void main(void) { led1=led2=led3=led4=led5=led6=led7=led8=OFF; while(1) { led1=led8=ON; delay1(); led2=led7=ON; delay1(); led3=led6=ON; delay1(); led4=led5=ON; delay1(); led1=led8=OFF; delay1(); led2=led7=OFF; delay1(); led3=led6=OFF; delay1(); led4=led5=OFF; delay1(); } } void delay1(void) { uchar i,j,k; for(i=0;i<10;i++) for(j=0;j<100;j++) for(k=0;k<255;k++); } 2、#include #define uchar unsigned char sbit k8=P1^0; sbit k7=P1^1; sbit k6=P1^2; sbit k5=P1^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void main(void) { while(1) { if(!k8) led5=0; if(!k7) led6=0; if(!k6) led7=0; if(!k5) led8=0; if(k8) led5=1; if(k7) led6=1; if(k6) led7=1; if(k5) led8=1; } } 3、(1)和(2) #include sbit k8=P1^0; sbit k2=P1^6; void main(void) { uchar num1,num2; num1=0; num2=0; while(1) { if(!k8) { num1++; P2=~num1; } if(!k2) { num2++; P2=~num2; } } } 3、(3) #include void delay(uchar); sbit k8=P1^0; sbit k7=P1^1; sbit k6=P1^2; sbit k5=P1^3; sbit k4=P1^4; sbit k3=P1^5; sbit k2=P1^6; sbit k1=P1^7; void main(void) { uchar num; num=0; while(1) { if(!k3||!k4||!k5||!k6||!k7) { num++; P2=~num; delay(100); } if(!k8) { num=0; P2=~num; delay(100); } } } void delay(uchar k ) { uchar x,y,z; for(x=k;x>0;x--) for(y=20;y>0;y--) for(z=250;z>0;z--); } 七、总结 对于这次的实验来说,还是不难的,因为看懂了图1-1后,在加上原来学过的C语言,所以这三个程序还是很容易搞定的,在按键去抖动的程序中,由于k1和k2和其他的键并不一样,这两个键在硬件上已经去抖动了, 因篇幅问题不能全部显示,请点此查看更多更全内容