你的位置:首页 > 操作系统

[操作系统]驱动数码管的实验


 

                       

 

 

 

 

 

 

 

   

 

 

课程名称:_单片机原理与应用

专业班级: 嵌入式14103班  

姓    名:_赵存档       _ __

学    号:_14160310317    __

 

2015--2016    学年第  1  学期

 

 

 

 


 

实验项目( 四 ) — 预习报告

项目

名称

驱动7段数码管实验

实验

目的

要求

1、掌握用proteus画电路图。

2、用Keil编写代码,进行调试。

3、进行仿真测试

4、将hex文件下载到单片机中,是否可以运行。

实验

内容

原理

实验内容:

打开proteus软件,画出单片机最小系统以及数码管的电路图,然后打开keil软件

编写驱动数码管的代码。代码调试完成没有错误后,设置晶振频率为12MHZ,生成hex文件后,将hex文件加载到proteus中,进行仿真测试运行。测试运行没有错误后,将hex文件下载到单片机开发板中,进行演示。

    

  实验原理:

    

由原理图可知,数码管接线方式为共阳极,所以给予数码管P1.0/1/2/3一个低电平0即可点亮数码管。P0则是赋值0x16进制数。如果让数码管显示0的话,则赋值0xc0即可显示0. 显示“0”是点亮了数码管的a,b,c,d,e,f,段。

预习

过程

中的

疑问以及解答

 

 

驱动数码管的实验

疑问:

疑问一:什么才能点亮数码管?

解答:先看原理图,数码管是否共阴极还是共阳极,由原理图可知,该数码管共阳极,所以给P1的0、1、2、3口一个低电平0即可点亮数码管,反之给一个高电平1就能将数码管熄灭。

 

疑问二:数码管怎么才能显示数字呢?

解答:数码管分7段,只要点亮各个数码管段,即可显示要求的数字。以共阳极数码管为例子:将(dp)gfedcba转成二进制 1100 0000 ,转成16进制0xc0即可点亮0。

 

疑问三:我要让数码管中的一个依次显示10个数,代码怎么写呢?

解答:先定义要点亮的数码管,例如点亮P1.0,开头定义sbit P1_0   =P1^0;然后定义一个数组来存放0—9的16进制unsigned char code table[]=   {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,   0xf8,0x80,0x90}; 然后while(i--)依次遍历数组赋值给P0。点亮P1_0 = 0延迟函数 delay();点亮P1_0=1;

 

疑问四:怎么写延迟函数?

一个机器周期1us, for循环8us, 第2个for循环8*1200约等于10ms,delay()函数延迟x*10ms

void delay(int x)

{

       int i,j;

       for(i=0;i<x;i++)

       for(j=0;j<1200;j++);

}

 

疑问五:数码管为什么要接电阻?

解答:保护数码管,限流。

 

疑问六:怎么才能知道数码管共阳极还是共阴极?

解答:看数码管是否接电源。接电源为共阳极。

 

疑问七:共阴极数码管跟共阳极数码管点亮方式一样吗?

解答:不一样。共阴极给以高电平点亮,共阳极给以低电平点亮。

 

 

 

 

 

 

实验项目( 四 ) — 实验报告

 

项目

名称

驱动数码管的实验

指导教师

高照玲

 

实验室

教室

实验日期

2015/10/16

 

分组

情况

赵存档

成    绩

 

 

实验步骤(算法、代码、方法)给出流程图

 

实验代码:

#include   <reg51.h>

sbit P2_0   = P2^0;

void   delay(int);

unsigned   char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90};

void   main()

{

       int i=10;

       while(i--)

       {

     P0=table[i];

     P2_0   = 0;

     delay(100);

              P2_0 = 1;

  }

}

void   delay(int x)

{

       int i,j;

       for(i=0;i<x;i++)

       for(j=0;j<1200;j++);

}

 

实验结果(结论及

分析)

 

 

实验结果以及分析:

通过本实验,学会了proteus 数码管电路图该怎么画,keil代码该怎么写。其中,for循环依次让数码管显示数字时出了错,不像纯C语言那样,用while(i--)就好了。在下载hex文件到开发板时注意 软件中开发板芯片是否选对。经过此次实验学到很多知识。

 

 

 

成绩