单片机动态显示技术实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

桂林电子科技大学实验报告2016-2017学年第一学期开课单位海洋信息工程学院适用年级、专业14级机械设计制造及其自动化课程名称《单片微型计算机与接口技术-课内实验》主讲教师周旋课程序号BS1615000_03课程代码BS1615000实验名称《动态显示技术》学号1416010516-17姓名林亦鹏卢炳荣动态显示技术实验报告一、实验目的1、掌握动态显示技术。2、掌握数码管与单片机的连接方法。3、掌握段代码表的推算及数据表的使用方法。4、掌握C语言编程方法。二、实验内容实验设备:计算机一台、单片机实验箱一台、Proteus软件、Keil软件。硬件原理图:采用共阴数码管,数码管的数据由单片机的P0口提供。当P0口输出相应的数据,相应的数码管就被点亮。如:P0=00111111B,则数码管最低位显示0。74LS573这里用于提高P0口的输出电流,驱动数码管显示,并有一定的隔离干扰的作用。本实验只用到8位数码管的其中一位。1、打开Keil新建工程:学号-4.uv2。2、参考实验程序,编写程序:首先在数码管最高位连续显示0~9字段,其次在数码管次高位连续显示0~9字段,依此类推。生成:学号-4.hex文件。3、打开下载软件,把学号-4.hex文件烧写到单片机,观察实验现象。4、修改程序,将自己的学号显示在数码管上。1、思考动态显示的工作原理。2、各寄存器的使用。3、读懂实验程序。三、实验结果分析1、程序流程图/***************************************实验名:动态显示技术*实验说明:8位数码管显示0~7**************************************#includereg51.h//--定义使用的IO口--//#defineGPIO_DIGP0//段选#defineGPIO_PLACEP1//位选//--定义全局变量--//unsignedcharcodeDIG_PLACE[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制,查表的方法控制unsignedcharcodeDIG_CODE[17]={0x06,0x66,0x06,0x7d,0x3f,0x06,0x3f,0x6d,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsignedcharDisplayData[8];//用来存放要显示的8位数的值//--声明全局函数--//voidDigDisplay();//动态显示函数voidmain(void){unsignedchari;for(i=0;i8;i++){DisplayData[i]=DIG_CODE[i];}while(1){DigDisplay();}}//子函数,使用数码管显示数字voidDigDisplay(){unsignedchari;unsignedintj;for(i=0;i8;i++){GPIO_PLACE=DIG_PLACE[i];//发送位选GPIO_DIG=DisplayData[i];//发送段码j=10;//扫描间隔时间(延时)while(j--);GPIO_DIG=0x00;//消隐}}根据以上程序用开发板来进行实验,程序可以实现要求。本次实验结果为14160105依次显示在数码管上。对于在进行实验的设计时,可能存在的错误,主要是C语言的一些使用规则的错误和对中断控制等代码的错误。等发生错误时,就应从代码的开始部分进行检查和分析,对于错误的地方进行修改,直到程序无错误为止。对于验证其功能时,应确认开发板没有损坏,正确连接电路等。四、思考与讨论1、数据表的调用方法。答:定义数组,将数据存储在数组中,再通过for循环语句,对其相对应数组中的数进行调用。2、数码管的使用方法。答:从数组中调用出的数,对应对数码管进行位选,具体到哪一位显示,在通过段选,对每一位数码管的具体段进行显示。3、利用定时/计数器实现延时,程序应该怎么写?答:加入定时器函数#includereg51.h#defineGPIO_DIGP0#defineGPIO_PLACEP1unsignedcharcodeDIG_PLACE[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodeDIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsignedcharDisplayData[8];voidDigDisplay();voidTimerConfig();申明定时器函数voidmain(void){unsignedchari;for(i=0;i8;i++){DisplayData[i]=DIG_CODE[i];}while(1){DigDisplay();}}voidDigDisplay(){unsignedchari;unsignedintj;for(i=0;i8;i++){GPIO_PLACE=DIG_PLACE[i];GPIO_DIG=DisplayData[i];TimerConfig();GPIO_DIG=0x00;//消隐}}voidTimerConfig(){TMOD=0x10;//设置定时计数器工作方式1,为定时器//--定时器赋初始值,晶振频率12MHZ下定时0.5ms--//TH0=0xFE;TL0=0x0C;EA=1;//打开总中断ET0=1;//开启定时器1中断TR0=1;//开启定时器}voidTimer(void)interrupt1{TH0=0xFE;//重新赋初值TL0=0x0C;timer0++;}五、小组表现评价(必填)在本次实验中16号负责程序编写,17号负责电路连接,配合得非常好,听完老师的讲解,剩下的就是我们自己调试了,有不懂的问老师,老师也讲得十分仔细,在调程序的过程中,主要是了解c语言的命令语句的使用方法,这是第四次实验,我觉得老师的实验方法是非常正确的,因为编写程序对于新手来说是非常困难和损耗时间的,现在直接引用现成的程序,通过老师的讲解,一样可以实现教学目的,了解程序的架构,更大的好处就是能让大家对编程更感兴趣,没有了编写程序初期的烦躁,只是做一些简单的延时的编写来实现实验的目的,从而大大的减少了对编程序是出现的错误。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功