当前位置:首页 >> 信息与通信 >>

单片机数字量输入输出实验


一、

实验目的

1. 熟悉教学板电路及其结构。 . 2. 掌握利用μVision C51 软件编辑、调试(包括仿真调试、单步调试) 、运行单片机 . μ
程序的步骤和方法,掌握利用 STC-ISP V39 软件和下载线将程序写入单片机的方 法 。

3. 通过实验熟悉 51 单片机的并行 I/O 口,并掌握它们的应用。 . 4. 掌握矩阵键盘、LED 动态显示的工作原理。 . 二、 实验设备

PC 机一台 、 实验教学板一块。

三、 实验内容
1.实验线路如附图所示, 单片机的 P0 口输出接 8 个发光二极管的阴极, 51 P2.4 经 NPN 三极管 9011 控制发光管的阳极。P3 口支持一个 8 位行列式键盘,其中 P3.4~P3.7 供键盘扫 描输出, P3.2、P3.3 作键盘扫描输入。 实验要求:编程实现键盘对发光二极管的控制,每按一个按键,使对应的二极管点亮。 2.51 单片机 P0 口输出同时接 4 个数码管的阴极,P2.0~P2.3,经 NPN 三极管 9011 接数码管的阳极,该端口用于分别控制相应数码管的导通。 实验要求:编程实现对任意按键动作的次数进行计数(最大 99 次) ,同时将计数值 实时显示。

四、实验步骤
1. 将实验板与 PC 机通过 COM 口连接。启动 PC 机,进入μVision 软件环境,选择建立 μ 新工程文件,即可开始输入源程序。 2.完成汇编、编译、连接,若有错误,则修改源程序,直至编译、连接通过为止。 3.接上实验板上的电源。 4. 运行“STC-ISP V39.EXE” ,将程序代码下载到实验板的单片机中。操作的顺序是: 1)选择单片机(MCU TYPE)型号。 如: “STC89C51RC”要与实验板上所装单片机的型号一至。 2)打开文件(Open File) 。 即把要下载到单片机的程序文件(已通过编译了的机器码文件——二进制 (.Bin)或十六进制(.Hex)的)调到“文件缓冲区” ,这时可看到右边的“文件缓冲 区” 有数字变化。 3)选择串行通信口。 选对时, 软件上的小灯会变绿。 否则小灯是灰色。 且在左下窗口提示 “出错信息” 。 4)下载:按“Download/下载”按键下载。 5)把实验板上的供电的直流电源拔掉或关掉 3 秒钟再插入或打开电源(为单片机 上电复位) 。 5.观察单片机运行情况,验证程序是否能完成题目给出的控制要求,若不能达到要求, 分析原因、查找错误,修改源程序,再次汇编、连接,重新下载、运行,直至达到题目的控 制要求。

五、遇到的问题及原因: 遇到的问题及原因 1. 实验一,把程序烧进单片机后,发现按键时,LED 灯乱亮,经检查是 LED 等亮的数

组除了问题,修改后可以正常工作。

2.在实验二中,程序烧进单片机后,有一个数码管很暗,并且有重影,修改了延时 .
之后问题结局。每按一次按键,显示数值会增加好多,后来发现是键盘扫描程序中,检测到 按键按下后,没有等待按键释放。

附件一:参考程序流程图 附件一:

实验内容 1 流程图 实验内容 2 流程图

键盘处理程序流程图

附件二: 附件二:实验程序: 实验内容1
#include <reg52.h> /*************************************************** 程序 名称:键盘 功能:采集2*4 键盘键值并在LED 灯上显示 作者:张俊淼 备注: ***************************************************/ /**************************************************/ #define uint unsigned int #define uchar unsigned char /**************************************************/ sbit feng=P2^5;//蜂鸣器控制 sbit deng=P2^4;//LED 灯总控制 sbit LED1=P2^0;//LED 数码管第一位 sbit LED2=P2^1;//LED 数码管第二位

sbit LED3=P2^2;//LED 数码管第三位 sbit LED4=P2^3;//LED 数码管第四位 sbit int0=P3^2;//外部中断0 管脚 sbit int1=P3^3;//外部中断1 管脚 /**************************************************/ uchar Buffer[4] = {0xe0, 0xd0, 0xb0, 0x70};//键盘对比数组 uchar LEDBuf[9] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0xff};//LED 灯编码 uchar Key=8;//键盘数值 /**************************************************/ void init(void); void delay_ms(uint x); /******************************************************************** * 名称 : main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { init();//初始化 while(1) { P0=LEDBuf[Key];//显示键值 } } /******************************************************************** * 名称 : init() * 功能 : 初始化 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void init(void) { EA=1; //开总中断 EX0=1; //开外部中断 0 IT0=1; //设置成边沿触发方式 EX1=1; //开外部中断 1 IT1=1; //设置成边沿触发方式 feng=0;//关蜂鸣器 deng=1;//开启LED 总控制

LED1=0;//关闭数码管第一位 LED2=0;//关闭数码管第二位 LED3=0;//关闭数码管第三位 LED4=0;//关闭数码管第四位 P3&=0x0f;//初始化键盘输入端检测 } /************************************************** * 名称 : delay_ms(uint x) * 功能 : 毫秒延时程序,对应C51 的11.0592MHZ * 输入 : 欲延时毫秒数 * 输出 : 无 **************************************************/ void delay_ms(uint x) //毫秒延时程序 { unsigned char j; while(x--) { for(j=0;j<123;j++){;} } } /**************************************************************/ /******************************************************************** * 名称 : Funint0() * 功能 : 外部中断0。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Funint0() interrupt 0 { uchar i,x; EX0=0; EX1=0; //关外部中断 0 //关外部中断 1

delay_ms(30);//延时消抖 if(int0==0)//判断按钮是否真的按下 { int0=0; P3|=0xf0;//以上两条为进一步检测作准备 x=P3&0xf0;//取P3 高四位

for(i=0;i<4;i++) { if(x==Buffer[i])Key=i;//获取键值 } while((P3&0xf0)!=0xf0);//等待按键放开 } P3=0x0f;//初始化键盘输入端检测 EX0=1; EX1=1; //开外部中断 0 //开外部中断 1

} /******************************************************************** * 名称 : Funint1() * 功能 : 外部中断1。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Funint1() interrupt 2 { uchar i,x; EX0=0; EX1=0; //关外部中断 0 //关外部中断 1

delay_ms(30);//延时消抖 if(int1==0)//判断按钮是否真的按下 { int1=0; P3|=0xf0;//以上两条为进一步检测作准备 x=P3&0xf0;//取P3 高四位 for(i=0;i<4;i++) { if(x==Buffer[i])Key=4+i;//获取键值 } while((P3&0xf0)!=0xf0);//等待按键放开 } P3=0x0f;//初始化键盘输入端检测 EX0=1; EX1=1; } //开外部中断 0 //开外部中断 1

实验内容2
#include <reg52.h> /**************************************************/ #define uint unsigned int #define uchar unsigned char /**************************************************/ sbit feng=P2^5;//蜂鸣器控制 sbit deng=P2^4;//LED 灯总控制 sbit LED1=P2^0;//LED 数码管第一位 sbit LED2=P2^1;//LED 数码管第二位 sbit LED3=P2^2;//LED 数码管第三位 sbit LED4=P2^3;//LED 数码管第四位 sbit int0=P3^2;//外部中断0 管脚 sbit int1=P3^3;//外部中断1 管脚 /**************************************************/ uchar LEDBuf[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//LED 数码管编码 uchar Num=0;//计数值 /**************************************************/ void init(void); void delay_ms(uint x); void shownum(uchar num); /**************************************************/ void main() { init(); while(1) { shownum(Num); } } /******************************************************************** * 名称 : init() * 功能 : 初始化 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void init(void) { EA=1; //开总中断 EX0=1; //开外部中断 0 IT0=1; //设置成边沿触发方式

EX1=1; IT1=1;

//开外部中断 1 //设置成边沿触发方式

feng=0;//关蜂鸣器 deng=0;//关闭LED 总控制 LED1=0;//关闭数码管第一位 LED2=0;//关闭数码管第二位 LED3=0;//关闭数码管第三位 LED4=0;//关闭数码管第四位 P3&=0x0f;//初始化键盘输入端检测 } /************************************************** 延时程序,对应C51 的11.0592MHZ **************************************************/ void delay_ms(uint x) //毫秒延时程序 { unsigned int i,j; i=0; for(i=0;i<x;i++) { j=108; while(j--); } } /******************************************************************** * 名称 : shownum() * 功能 : 数码管显示数字 * 输入 : 0~99 的要显示的数字 * 输出 : 无 ***********************************************************************/ void shownum(uchar Num) { static uchar number[2]={0x00, 0x00};//数码管的个位和十位 number[1]=Num/10; number[0]=Num%10; P0=LEDBuf[number[0]]; LED3=0;//关闭数码管第三位 LED4=1;//开启数码管第四位 delay_ms(10);//个位显示延时

P0=LEDBuf[number[1]]; LED3=1;//开启数码管第三位 LED4=0;//关闭数码管第四位 delay_ms(10);//十位显示延时 } /**************************************************************/ /******************************************************************** * 名称 : Funint0() * 功能 : 外部中断0。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Funint0() interrupt 0 { EX0=0; //关外部中断 0 EX1=0; //关外部中断 1 delay_ms(10);//延时消抖 if(int0==0)//判断按钮是否真的按下 { while(int0==0);//等待按键放开 Num++; } P3=0x0f;//初始化键盘输入端检测 EX0=1; EX1=1; //开外部中断 0 //开外部中断 1

//

} /******************************************************************** * 名称 : Funint1() * 功能 : 外部中断1。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void Funint1() interrupt 2 { EX0=0; //关外部中断 0 EX1=0; //关外部中断 1

//

delay_ms(10);//延时消抖 if(int1==0)//判断按钮是否真的按下 { while(int1==0);//等待按键放开 Num++; } P3=0x0f;//初始化键盘输入端检测 EX0=1; EX1=1; //开外部中断 0 //开外部中断 1

}


相关文章:
单片机数字量输入输出实验.doc
单片机数字量输入输出实验 - 一、 实验目的 1. 熟悉教学板电路及其结构。 .
单片机P1口输入输出实验_图文.ppt
单片机P1口输入输出实验 - 单片机I/O口输入输出实验 (或单片机数字量输入输出实验) 单片机P1口输入输出实验 实验重点:硬件设计、程序设计、现象分析 实验难点:实际...
数字量输入输出实验.doc
数字量输入输出实验 - 实验内容 编写实验程序,将P1口的低4位定义为输出,高4
单片机P1口输入输出实验_图文.ppt
单片机P1口输入输出实验 - 单片机I/O口输入输出实验 (或单片机数字量输入输出实验) 单片机P1口输入输出实验 实验重点:硬件设计、程序设计、现象分析 实验难点:实际...
实验一 数字量输入输出实验.doc
实验一 数字量输入输出实验 - 华南师范大学大学城校区单片机基础公选课期末实验专用。... 数字量输入输出 (1) 43页 免费 单片机中断系统实验与数... 暂无评价 ...
单片机开关量输入实验.doc
单片机开关量输入实验 - 实验 1 开关量输入实验 目的:掌握开关量的特点和编程方法。 内容:由拨码开关输入开关量到单片机单片机根据不同的开关量输出相应的信号,...
单片机IO开关输入输出实验报告.doc
单片机IO开关输入输出实验报告 - 关于单片机I/O口输入输出实验报告... 单片机IO开关输入输出实验报告_电子/电路_工程科技_专业资料。关于单片机I/O口输入输出实验报告 ...
实验一 IO开关量输入输出实验.doc
实验一 IO开关量输入输出实验 - 单片机原理实验报告 实验一:IO 开关量输入输出实验 学专班学姓 院 : 业 : 级 : 号 : 名 : 物理与机电工程学院 电子科学...
2015单片机实验.doc
熟悉Keil编程开发环境参考《单片机实验指导书》,编写C51实验程序,将00H~0FH 共...2. 数字量输入输出实验 1) P1 口是8 位准双向口, 每一位均可独立定义为...
单片机实验报告[1]_图文.doc
单片机实验报告[1]_信息与通信_工程科技_专业资料。中南大学信息科学与工程学院...课外独立完成 实验三 实验四 数字量输入输出实验 基本部分:阅读、验证 C 语言...
单片机实验一 输入输出端口控制实验_图文.doc
单片机实验输入输出端口控制实验 - 昆明理工大学信息工程与自动化学院学生实验报告 ( 2014 2015 学年 第 2 学期) 课程名称:嵌入式技术 年级、专业、班 ...
实验五 单片机DA输出实验.doc
实验五 单片机DA输出实验_电子/电路_工程科技_专业资料。实验五 单片机 DA 输出实验一、实验目的 1、了解 D/A 转换的基本原理。 2、了解 D/A 转换芯片 0832 ...
单片机实验指导书_图文.doc
单片机实验指导书 - 单片机实验指导书 单片机原理实验 实验一 系统认识实验 单片机集成功能模块实验 实验一 数字量输入/输出实验 单片机系统扩展实验 实验三 静态存储...
数字量输入输出模块设计教程.pdf
数字量输入输出模块设计教程 - 数字量输入/输出模块 单片机的输入输出口线是最容
51单片机 信号输入输出_图文.ppt
开关量的输入输出 信号输入输出实验 7.1 单片机应用系统的结构 图7.1单片机...和“关”)的开关型传感器;输出为模拟型传感器; 输出为脉冲或代码的数字型传感器...
单片机实验-- AD转换实验.doc
实验6 一、实验目的: A/D 转换实验 1. 掌握 A/D 转换与单片机的接口方法...ADC0809 是一种逐次逼近式 8 路模拟输入, 8 位数字量输出的 A/D 转换器。...
单片机实验报告_图文.doc
单片机实验报告 单片机实验报告 专业班级: 11 网络 学姓号: 名: 201127020104 ...使用汇编语言编程,完成实验 指导书之“3.1 数字量输入输出实验”基本实验项目(P...
单片机i o输入与输出.doc
单片机i o输入与输出 - 单片机实验报告 2 姓名 时间 学号 2015.4.23 地点 B526 评阅 实验题目 I/0 口输入输出实验 一、 实验目的 1、学习 I/O 口的...
单片机实验报告书.doc
单片机实验报告书 - 并行 I/O 接口实验 一、实验目的 熟悉掌握单片机并行 I/O 接口输入输出的应用方法。 二、实验设备及器件 个人计算机 1 台,装载了 Keil ...
C51单片机实验指导书.doc
C51单片机实验指导书_电子/电路_工程科技_专业资料。单片机原理与接口技术实验讲义......12 1 实验 1 实验 2 实验 3 IO 开关量输入实验………...12 IO 输出...
更多相关标签: