单片机实验报告 下载本文

五、实验结果分析

实验初,对电路原理图没弄清楚,共阴级和共阳极不分,导致led灯不是按照预料的想法进行工作,经过多次实验,终于弄清楚问题所在,完成实验

实验二 数码管实验

一、设计题目

1、用一个数码管循环演示0-9

2、用数码管显示1,2,3,4,5,6,7

二、实验原理

数码管是一种半导体发光器件,是MCS-51单片机系统中用得非常多的一种输出通设 备,其基本单元是发光二级管。MCS-51单片机系统中最常使用的是8段数码管。 1、数码管显示原理

gfGNDabaabcdefgdp+5V abcdefgdp e dgfbcdp·

edGNDcdp(a)(b)图4-1 数码管内部原理图

共阳极数码管的8个发光二极管的阳极(正极)连接在一起接高电平(一般接电源),其它管脚接各段驱动电路输出端。当某段的输出端为低电平时,则该段所连接的发光二极管导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。

共阴极数码管的8个发光二极管的阴极(负极)连接在一起接低电平(一般接地),其它管脚接各段驱动电路输出端。当某段的输出端为高电平时,则该段所连接的发光二极管导

通并点亮,根据发光字段的不同组合可显示出各种数字或字符。因此我们在显示数字的时候首先做的就是给“0-9”十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。 2、数码管静态显示

静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是,当显示多位数字时,将占用较多的I/O端口,硬件电路比较复杂,成本较高。

3、数码管动态显示

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。点亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

三.软件设计:

<1> //用一个数码管循环演示0-9 #include

unsigned char code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90};

main() {

unsigned char i; unsigned int j; while(1) {

for(i=0;i<10;i++) //循环演示0-9 {

P2=tab[i];

for(j=0;j<50000;j++); //延时 } } }

<2> //用数码管显示1,2,3,4,5,6,7 // 数码管同时显示1-7

#include

unsigned char code wei[7]={0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE}; /*共阳0有效*/ unsigned char code duan[7]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07}; /*共阴1有效*/ main() {

unsigned char i; unsigned int j; while(1)

{for(i=0;i<7;i++) //循环演示1-7 {

P0=wei[i]; //位选 P2=duan[i]; //段选1-7

for(j=0;j<10;j++); //短暂延时 } } }

四.结果分析

白色的排线接反了,导致数字出来的不对,重新插排线。

实验三. 按键实验

一、设计题目

1、让蜂鸣器不同频率的发声 2、用按键控制灯亮灯灭 3. 用按键控制蜂鸣器响

二.工作原理:

键盘是计算机系统中不可缺少的输入设备,当按键少时可接成线性键盘(或称独立键盘),即一个键盘占用一个I/O口中一位,当按键较多时,这样的接法占用口线较多。在按键较多时,常将按键接成矩阵的形式,可以节省口线,例如一个I/O口可按2×4的形式接8个按键。

独立式按键采用每个按键单独占用一个I/O口中的一位结构,即按键的一端与电源地相连,另一端与单片机的任一I/O口中的一位相连。开始时先给该I/O口赋一高电平,然后让单片机不断检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平;程序一旦检测到I/O口某位变为低电平,则说明连接该位的按键被按下,然后执行相应的指令。

图5-1示出了单片机实验仪的独立键盘模块。它有K1~K8 8个独立键盘组成,每个按键有一端公共接地,另一端分别连接至JP5接线排座的8个引脚,可通过这些引脚连接到某个I/O口。

三. 软件设计:

1、程序流程图 2、源代码: <1> //蜂鸣器 #include sbit buzzer=P2^7; void delay() { int i;

for(i=0;i<500;i++); }

void main() {

while(1) {

buzzer=1; delay(); //延时 buzzer=0; delay(); //延时 } }

<2> //用按键控制灯亮灯灭 #include sbit key=P3^3; sbit led=P2^7; void delay() { int j;

for(j=110;j>0;j--); }

void main() {

P3=0xff;

while(1) {

if(key==0) led=0; else led=1; }}

<3> //用按键控制蜂鸣器响 程序代码:

#include sbit buzzer=P2^7; sbit key=P3^0; void delay() { int i;

for(i=0;i<500;i++); }

void main() {

while(1) { if(key==0) {buzzer=1; delay(); //延时 buzzer=0; delay(); //延时 }} }

<4> //用按键控制数码管亮0-9 程序代码:

#include

#define uchar unsigned char sbit key=P3^2; void delay() { unsigned long int i; for (i=0;i<2200;i++); }

void main() { uchar code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar i;i=0; while(1)