课程名称:_单片机原理与应用
专业班级: 嵌入式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文件到开发板时注意 软件中开发板芯片是否选对。经过此次实验学到很多知识。 |
|||
成绩 |