内容正文:
第2章单片机输入输出I/O口
单片机的应用是指用程序来控制硬件,掌握MCS-51单片机片内硬件的基本结构和特点才能用好单片机。本章主要介绍单片机与各种常用显示器件、键盘的接口设计与软件编程。
重点:最小系统结构与作用;输入输出接口函数编制与调试;
难点:程序的编写;行列键盘程序的理解。
2.1 MCS-51单片机引脚及功能
2.2 单片机最小系统
2.3 C51基础知识
1 、C与C51
2、C51常用运算符
3、C51基本语句
4、C51数据类型
5、C51存储器类型
6、C51程序基本结构
7、C51重要库函数
8、C51标识符
2.4案例学习
1、一只LED闪烁
2、八只LED流水点亮
3、数码显示
4、 按键识别
5、8*8LED点阵显示屏
6、LCD液晶显示
案例学习---一只LED闪烁
案例学习---八只LED流水点亮
9
案例学习---数码显示(静态)
参考程序:
#include"reg51.h"
code unsigned char disp_code[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f }; // 共阴极数码管字段码
void main() //主程序
{ P2=disp_code[6]; //数码管显示 6
while(1); }
案例学习---数码显示(动态)
案例学习---按键识别(独立按键)
案例学习---按键识别(行列按键)
系统总判
总判有无键按下
反转法
扫描法
案例学习---8*8LED点阵显示屏
走马灯显示一个字符
显示一个字符
显示十个字符
案例学习---LCD液晶显示
LCD显示流程图
习题---判断题
(1)MCS-51单片机共有两个时钟XTAL1,XTAL2。
(2)指令周期是执行一条指令的时间。
(3)一般消除键盘的抖动有两种方式,分别是电子消抖 和机械消抖 。
(4)所有定义在主函数之前的函数无需进行声明。
(5)C语言允许函数先使用然后再定义。
(6)若一个函数的返回类型为void,则表示其没有返回值。
(7)#define表示宏定义。
(8)在动态扫描技术中,扫描周期必须控制在视觉停顿时间内,一般在 20s 以内,否则会出现闪烁或跳动现象
(9)若采用6MHz的晶体振荡器,则MCS-51单片机的机器周期为2us。
(10)单片机的复位操作电平是大于两个时钟周期的高电平。
习题---选择题
1)51单片机的( )口的引脚,还具有外中断、串行通信等第二功能。
A、P0 B、P1 C、P2 D、P3
2)51单片机高8位地址线由()构成,共( )位。
A、P0,8 B、P1,16 C、P2,8 D、P3,16
3)MCS-51单片机复位操作后,程序指针PC初始化为( )。
A.0x0100 B.0x2080 C.0x0 D.0x8000
4)C语言提供的合法的数据类型关键字是( )。
A、Double B、Short C、integer D、char
5)降低单片机的晶振频率,则机器周期( )。
A、不变 B、变长 C 、变短 D、不定
习题---选择题
6)下列描述中正确的是( )。
A、程序就是软件 B、软件开发不受计算机系统的限制
C、软件既是逻辑实体,又是物理实体
D、软件是程序、数据与相关文档的集合
7)若一个函数的返回类型为void,则表示其( )。
A、函数内容为空 B、有返回值
C、无返回值 D、函数没有意义
8)在C51程序中必须有一个main函数。 单片机变量一般存放在( )
A、 RAM B、ROM C、寄存器 D、CPU
9)单片机应用ROM中一般存放( )
A) 变量 B)数据 C)常量 D)程序和表格常数
习题---选择题
10)单片机8051的XTAL1和XTAL2引脚是( )引脚。
A、外接定时器 B、外接串行口 C、外接中断 D、外接晶振
11)若单片机P2口的P20-P27八个引脚,分别接一个共阴极数码管的a,b,c,d,e,f,g,dp八个管脚时,如欲显示字符‘=’,段码应为
A、67H B、6EH C、 91H D、48H
12)while(1){;}语句功能为( )。
A、退出程序 B、跳转 C、赋值 D、无限循环
习题---简答题
1、 请说明单片机并口P0-P3的结构和主要功能区别。
2、 KeiL C51软件中,工程文件的扩展名是什么,编译连接后生成可烧 写的文件扩展名是什么。
3、 单片机的最小系统包括哪三部分,各部分主要作用是什么。
4、 8051 的引脚RST是IN脚还是OUT脚,当其端出现什么电平时,8051进入复位状态。8051一直维持这个值,直到RST脚收到什么电平,8051才脱离复位状态,进入程序运行状态.
5、 七段LED显示器有动态和静态两种显示方式,这两种显示方式要求8051系列单片机如何安排接口电路?
6、 说明数码管静态显示、动态显示的原理与结构,请编程举例说明。
7、 键盘抖动原因是什么?为什么要消除按键的机械抖动?消除按键抖动的方法有几种?
�
�
begin�
初始化
无限循环�
点亮彩灯
延时
延时
熄灭彩灯
�
�
开始�
初始化
无限循环�
否
是
选择第一个数码显示
8次循环完成?
送段码,送位码,停顿一下
关闭位码
�
�
开始�
初始化变量
无限循环�
否
是
否
再次确认清零键按下?
计数键按下?�
是清零键按下?
数码管显示
延时消抖;
再判是计数键按下?
计数按键抬起?�
是
按键抬起?
计数清零
延时消抖
计数值加1,到10?
是
否
是
否
是
计数值置零
否
是
否
否
是
�
�
开始�
端口初始化
无限循环�
无
有
识别键盘
总判有无键按下?�
数码管显示
�
�
入口
初始化,端口送低4位全零
高4位有低电平?�
返回1
返回 0
结束
有
无
�
�
开始�
设置变量
按键总判有无按键按下�
无
有
延时消抖
再总判有无键按下?�
否
是
读端口,反转输出4位低电平,
回读,组成行列值
按键抬起?�
是
否
在键值数组里
查到或已查完?�
无
有
退出,返回键值
�
�
开始
设定变量
总判有无按键按下?
是
在键值数组里
查到或已查完? �
是
否
无
有
否
退出查询循环,返回键盘值
延时消抖
再总判有无键按下?�
按键抬起?�
准备第一列扫描
是
4列扫描结束?
对应行列值合并
下一列
回读到该列电平是零?
换下列送零,并记录
无
有
否
是
否
�
�
开始
初始化
无限循环�
是
否
设定第一列列数据
8列循环开始
8列结束?
准备换列
送行数据和列数据
�
�
开始�
初始化
无限循环�
否
是
否
是
设置显示个数变量i
i<10�
否
指向下一个显示字符数据
设置显示循环次数变量m
m<40�
显示的循环次数归零
第一列 k=0x01;
第一行 j=0
j<8�
指向下一列(或行)
消影,送列,送行;
是
�
�
开始
初始化
无限循环�
是
否
是
否
从数组第一个开始取数
到数组的最后一个?�
从数组的下一列开始取数
循环显示次数开始
十遍显示完?
循环次数加1
点阵的第一列;
点阵8列显示开始
点阵8列结束?
准备下一列的行数据
清行数据和列数据;
数组数据到最后一列?
送行数据
是
否
否
是
转到数组的开始位置
�
�
开始
初始化变量
无限循环�
否
是
16列显示循环完成?�
延时
列字符显示
$$