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

    成绩

  • 相关阅读:
    CentOS8 安装 Java JDK
    小程序问题汇总
    CSS实现侧边栏固定宽度,内容栏自适应
    垂直居中总结
    移动端Web App自适应布局探索
    学习指南
    插件集
    移动端滑动事件
    网站收藏
    js void运用
  • 原文地址:https://www.cnblogs.com/zhaocundang/p/4925730.html
Copyright © 2011-2022 走看看