zoukankan      html  css  js  c++  java
  • 驱动数码管的实验

                           

     

       

     

     

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

    专业班级: 嵌入式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文件到开发板时注意 软件中开发板芯片是否选对。经过此次实验学到很多知识。

    成绩

  • 相关阅读:
    2021NUAA暑假集训 Day3 题解
    2021NUAA暑假集训 Day2 题解
    2021NUAA暑期模拟赛部分题解
    CodeForces 1038D Slime
    UVA 11149 Power of Matrix
    UVA 10655 Contemplation! Algebra
    UVA 10689 Yet another Number Sequence
    HDU 4549 M斐波那契数列
    HDU 4990 Reading comprehension
    CodeForces 450B Jzzhu and Sequences
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/4925730.html
Copyright © 2011-2022 走看看