电子科技大学选修单片机实验报告

合集下载

关于单片机实训报告万能【六篇】

关于单片机实训报告万能【六篇】

关于单片机实训报告万能【六篇】【篇1】单片机实训报告万能通过今次单片机实训,使我对单片机的认识有了更深刻的理解。

系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。

由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。

例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。

踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。

当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。

我相信其中的酸甜苦辣最终都会化为甜美的甘泉。

但在这次实训中同时使我对汇编语言有了更深的认识。

当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。

这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。

这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。

希望这次的经历能让我在以后学习中激励我继续进步。

【篇2】单片机实训报告万能通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。

了解了一些简单程序的录入,LED显示器、键盘、和显示器的应用和原理。

LED显示器:LED显示器是由发光二管组成显示字段的器件。

通常的8段LED显示器是由8个发光二极管组成,LED显示器分共阳极和共阴极两种。

有段选码和和位选码。

当LED显示器每段的平均电流位5MA时,就有较满意的亮度,一般选择断码5-10MA 电流;位线的电流应选择40-80MA。

LED显示器的显示方式有动态和静态两种。

7289A芯片是具有SPI串行接口功能的显示键盘控制芯片,它可同时取得8位共阴极数码管和64个键的键盘矩阵。

单片机实训报告优选范文5篇分享

单片机实训报告优选范文5篇分享

单片机实训报告优选范文5篇分享单片)是一种集成电路芯片,是具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

下面就是小编给大家带来的单片机实训报告优选范文5篇分享,希望大家喜欢!单片机实训报告范文(一)前言一周的单片机实训很快就结束咯,在这一周的时间里,我学到了很多关于单片机各方面的知识。

老师在实训课中也教会咯我们很多关于单片机软件编程与硬件设施的知识。

一周的实训中我们一共实训咯好几个项目,通过这几个项目的实训,我们掌握咯一些单片机的汇编语言和硬件调试,达到了很好的效果。

一周时间实训过后,我把之前在课堂上不懂的知识点,通过实际操作的练习,我都搞明白咯。

当然在实训过程中也遇到咯很多问题,就是有时在调试方面不能调试成功,有时程序是没有错误,但是就是调试不好,一直找原因也找不出是什么原因。

希望以后能够拥有更多的实训时间和机会学习单片机。

实训任务一一、实验目的熟悉Keil C51集成开发环境的使用方法二、实验设备及器件IBM PC机三、实验内容按照本书的第2章的2.1节到2.4节内容进行Keil C51集成开发环境的安装和使用练习。

然后按照以下内容建立文件并编译产生HEX文件。

ORG 8000HLJMP MainORG 80F0HMain:MOV R7,#0LOOP:MOV R6,#0DJNZ R6,$DJNZ R6,$DJNZ R6,$DJNZ R6,$DJNZ R7,LOOP ;延时一台CPL P1.0CPL P1.1CPL P1.2CPL P1.3CPL P1.4CPL P1.5CPL P1.6CPL P1.7SJMP MainEND ;P1.0取反 ;P1.1取反 ;P1.2取反 ;P1.3取反 ;P1.4取反 ;P1.5取反 ;P1.6取反 ;P1.7取反通过该程序实现八盏灯的同时亮和同时灭的功能,更好的掌握汇编指令。

单片机实验报告

单片机实验报告

单片机实验报告一、实验目的本次单片机实验的主要目的是通过实际操作和编程,深入了解单片机的工作原理和应用,掌握单片机系统的设计、开发和调试方法,提高自身的动手能力和解决问题的能力。

二、实验设备1、单片机开发板2、计算机3、编程软件(如 Keil)4、下载器5、示波器6、万用表三、实验内容1、点亮 LED 灯通过编写简单的程序,控制单片机的引脚输出高低电平,从而点亮或熄灭连接在该引脚上的 LED 灯。

这是单片机最基础的操作之一,旨在熟悉单片机的编程环境和引脚控制方式。

2、数码管显示利用单片机驱动数码管,实现数字的显示。

需要了解数码管的工作原理和驱动方式,通过编程控制数码管的段选和位选信号,显示不同的数字。

3、按键输入设计按键电路,通过读取按键的状态,实现对单片机系统的输入控制。

例如,通过按键切换不同的显示模式或控制其他外部设备。

4、定时器/计数器应用使用单片机的定时器/计数器功能,实现定时、计数等操作。

例如,设计一个定时闪烁的 LED 灯,或者通过计数器统计外部脉冲的个数。

5、串口通信实现单片机与计算机之间的串口通信,将单片机采集到的数据发送到计算机上进行显示和处理,或者接收计算机发送的指令对单片机系统进行控制。

四、实验原理1、单片机的基本结构单片机通常由中央处理器(CPU)、存储器(包括程序存储器和数据存储器)、输入输出接口(I/O 口)、定时器/计数器、中断系统等部分组成。

2、编程语言本次实验采用 C 语言进行编程。

C 语言具有简洁、高效、可移植性强等优点,非常适合单片机的开发。

3、引脚功能单片机的引脚分为电源引脚、时钟引脚、复位引脚、I/O 引脚等。

通过对这些引脚的合理配置和控制,可以实现各种功能。

4、数码管驱动原理数码管分为共阴极和共阳极两种类型。

通过控制数码管的段选和位选信号,可以使数码管显示不同的数字和字符。

5、按键检测原理按键通常采用上拉电阻或下拉电阻的方式连接到单片机的I/O 引脚。

单片机实验报告(相当不错,有具体实验结果分析哦)

单片机实验报告(相当不错,有具体实验结果分析哦)

学生姓名:学号:专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期:实验成绩:实验一 I/O 口输入、输出实验地点:基础实验大楼A311一、实验目的掌握单片机P1口、P3口的使用方法。

二、实验内容以P1 口为输出口,接八位逻辑电平显示,LED 显示跑马灯效果。

以P3 口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。

三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。

因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。

若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区)。

2学生姓名:学号:专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期:实验成绩:五、实验步骤1)系统各跳线器处在初始设置状态。

用导线连接八位逻辑电平输出模块的K0 到CPU 模块的RXD(P3.0 口);用8 位数据线连接八位逻辑电平显示模块的JD4B 到CPU 模块的JD8(P1 口)。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

3)观察发光二极管显示跑马灯效果,拨动K0 可改变跑马灯的方向。

六、实验参考程序本实验参考程序:;//******************************************************************;文件名: Port for MCU51;功能: I/O口输入、输出实验;接线: 用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。

单片机实验报告范文

单片机实验报告范文

单片机实验报告范文一、实验目的本实验的目的是通过学习单片机的基本原理和使用方法,掌握单片机在各个实际应用中的基本技能。

二、实验器材及原理1.实验器材:STC89C52单片机、电源、晶振、按键、LED灯、蜂鸣器等。

2.实验原理:单片机是一种微处理器,能够完成各种复杂的功能。

通过学习单片机的工作原理和编程方法,可以控制各种外围设备,实现不同的功能。

三、实验内容及步骤1.实验一:点亮LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)编写程序,点亮LED灯。

2.实验二:按键控制LED灯步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)将按键和LED灯与单片机相连。

(3)编写程序,实现按下按键控制LED灯亮灭。

3.实验三:数码管显示步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)将数码管与单片机相连。

(3)编写程序,将数字输出到数码管上显示。

4.实验四:定时器应用步骤:(1)连接电源和晶振,将STC89C52单片机连接到电路板上。

(2)编写程序,实现定时器功能。

四、实验结果及分析1.实验一:点亮LED灯LED灯成功点亮,证明单片机与外部设备的连接正常。

2.实验二:按键控制LED灯按下按键后,LED灯亮起,松开按键后,LED灯熄灭。

按键控制LED 灯的效果良好,说明单片机的输入输出功能正常。

3.实验三:数码管显示数码管成功显示数字,说明单片机能够实现数字输出功能。

通过程序设计,可以实现数码管显示不同的数字。

4.实验四:定时器应用定时器正常运行,能够实现精确的定时功能。

通过调节定时器的参数,可以实现不同的定时功能。

五、实验总结通过本次实验,我们学习了单片机的基本原理和使用方法。

通过掌握单片机的编程技巧,我们能够实现各种复杂的功能,如控制LED灯、按键控制、数码管显示等。

这些技能对于日常生活和工程设计都具有很大的实用性。

在实验过程中,我们遇到了各种问题,如电路连接错误、程序编写错误等。

单片机实验报告

单片机实验报告

单片机实验报告1. 实验背景单片机(Microcontroller Unit,简称MCU)是一种集成了微处理器核心、内存、计时器、I/O接口等功能的集成电路芯片。

它具有体积小巧、功耗低、性能高等优点,在嵌入式系统中应用广泛。

本实验旨在通过对单片机的实际操作,加深对单片机原理及应用的理解。

2. 实验目的本次实验的主要目的是:- 掌握单片机的基础知识,包括单片机的结构、工作原理等;- 学习单片机的编程方法,初步掌握单片机的编程技巧;- 进行简单的单片机应用实验,提高对实际应用的理解。

3. 实验设备与材料实验所需的设备和材料包括:- 单片机开发板;- 计算机;- 连接线等。

4. 实验过程与结果在本实验中,我们使用XXX型单片机开发板作为实验平台,通过连接计算机进行编程。

具体的实验过程如下:4.1 硬件连接将单片机开发板与计算机通过连接线连接,并确保连接正常。

接下来,将我们设计好的电路按照要求连接到开发板的相应引脚上。

4.2 编程使用XXX软件对单片机进行编程。

根据实验要求,编写相应的程序代码,并将代码下载到单片机开发板中。

验证代码是否编译通过,并将运行结果显示在数码管、液晶显示屏等外设上。

4.3 实验结果实验结果根据不同的实验要求而定,可以是对某个外设的控制、信号的采集、数据的处理等。

在实验过程中需记录实验结果,并进行分析。

5. 实验总结通过本次实验,我对单片机的基本原理及应用有了更深入的了解。

掌握了单片机的硬件连接方法和编程技巧,并成功完成了实验要求。

实验结果表明,单片机在各个领域都有广泛的应用前景,对于嵌入式系统的开发起着重要作用。

当然,本次实验只是单片机应用的初步探索,还有很多更深入的研究和应用值得去探索。

在今后的学习与实践中,我将进一步深化对单片机的理解,并将其灵活应用于各种项目中。

6. 参考文献[参考文献1][参考文献2][参考文献3](文章内容仅供参考,具体实验过程和结果以实际情况为准。

)。

单片机实验报告

单片机实验报告

一、实验目的1. 熟悉单片机的硬件组成和基本工作原理。

2. 掌握单片机最小系统的搭建方法。

3. 学习使用单片机编程软件进行程序编写和调试。

4. 通过实际操作,加深对单片机应用的理解。

二、实验环境1. 实验设备:MCS-51单片机实验板、电源模块、面包板、连接线、LED灯、蜂鸣器、按键等。

2. 软件环境:Keil uVision5、Proteus仿真软件。

三、实验内容1. 点亮LED灯(1)实验目的:掌握单片机I/O口的使用,实现LED灯的点亮。

(2)实验步骤:① 将LED灯的阳极连接到单片机的P1.0口,阴极连接到GND。

② 在Keil uVision5中新建工程,编写程序如下:```cvoid main() {while (1) {P1 = 0xFF; // 点亮LED灯delay(500000); // 延时P1 = 0x00; // 熄灭LED灯delay(500000); // 延时}}③ 将程序编译并下载到单片机中,观察LED灯的点亮效果。

2. 蜂鸣器控制(1)实验目的:掌握单片机I/O口的使用,实现蜂鸣器的控制。

(2)实验步骤:① 将蜂鸣器的正极连接到单片机的P1.1口,负极连接到GND。

② 在Keil uVision5中编写程序如下:```cvoid main() {while (1) {P1 = 0x02; // 使能蜂鸣器delay(100000); // 延时P1 = 0x00; // 禁止蜂鸣器delay(100000); // 延时}}```③ 将程序编译并下载到单片机中,观察蜂鸣器的鸣叫效果。

3. 按键扫描(1)实验目的:掌握单片机I/O口的使用,实现按键的扫描和识别。

(2)实验步骤:① 将两个按键分别连接到单片机的P1.2和P1.3口。

② 在Keil uVision5中编写程序如下:void main() {while (1) {if (P1 & 0x04) { // 检测按键1是否按下// 执行按键1按下后的操作}if (P1 & 0x08) { // 检测按键2是否按下// 执行按键2按下后的操作}}}```③ 将程序编译并下载到单片机中,观察按键的扫描和识别效果。

单片机实训实验报告

单片机实训实验报告

一、实验名称单片机原理及应用实验二、实验目的1. 熟悉单片机的基本结构和原理,了解单片机在电子系统中的应用。

2. 掌握单片机编程语言C的基本语法和编程技巧。

3. 学会使用单片机进行简单控制,实现LED流水灯、数码管显示等基本功能。

4. 提高动手实践能力,培养团队合作精神。

三、实验仪器与设备1. 单片机实验箱:包括单片机、电源、按键、LED灯、数码管等。

2. 电脑:用于编程和仿真。

3. 编程软件:Keil uVision5或IAR EWARM等。

四、实验原理单片机是一种集成度高、功能强大的微控制器,具有运算速度快、功耗低、体积小等优点。

本实验以51单片机为例,介绍其基本原理和编程方法。

51单片机主要由以下几个部分组成:1. 中央处理器(CPU):负责执行指令,控制整个单片机系统。

2. 存储器:包括程序存储器(ROM)和数据存储器(RAM),用于存储程序和数据。

3. 输入/输出接口:用于与外部设备进行数据交换。

4. 定时器/计数器:用于实现定时和计数功能。

5. 中断系统:用于处理中断事件。

本实验主要涉及以下几个方面:1. 单片机基本结构和工作原理。

2. 单片机编程语言C的基本语法和编程技巧。

3. 单片机I/O口的使用和驱动能力。

4. 定时器/计数器的使用和编程。

5. 中断系统的使用和编程。

五、实验内容1. 实验一:LED流水灯(1)实验目的:掌握单片机I/O口的使用,实现LED流水灯效果。

(2)实验原理:通过单片机I/O口输出高低电平,控制LED灯的亮灭,实现流水灯效果。

(3)实验步骤:① 连接实验箱电路,将LED灯连接到单片机的P1口。

② 编写程序,设置P1口为输出模式,通过循环改变P1口输出电平,实现LED流水灯效果。

③在电脑上编译、下载程序,观察实验效果。

2. 实验二:数码管显示(1)实验目的:掌握单片机I/O口的使用,实现数码管显示功能。

(2)实验原理:通过单片机I/O口输出高低电平,控制数码管显示数字。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学学院实验报告实验名称现代电子技术综合实验姓名:学号:评分:教师签字电子科技大学教务处制电子科技大学实验报告学生姓名:学号:指导教师:熊万安实验地点:211大楼308 实验时间:一、实验室名称:单片机技术综合实验室二、实验项目名称:数码管显示A/D转换电压值及秒表三、实验学时:12四、实验目的与任务:1、熟悉系统设计与实现原理2、掌握KEIL C51的基本使用方法3、熟悉实验板的应用4、连接电路,编程调试,实现各部分的功能5、完成系统软件的编写与调试五、实验器材1、PC机一台2、实验板一块六、实验原理、步骤及内容试验要求:①、数码管可在第2位到第4位显示A/D转换的电压值,可调电压,数码管第5位显示“-”号,第6、7位显示2位学号;②、再按按键key1进行切换,此时数码管第6、7位显示从学号到(学号值+5秒)的循环计时秒表,时间间隔为1秒。

按按键key2时,秒表停止计数,再按按键key2时,秒表继续计数。

按按键key1可切换回任务1的显示。

③、当电压值大于2伏时,按按键不起作用。

1、硬件设计2、各部分硬件原理(相关各部分例如:数码管动态扫描原理;TLC549ADC特征及应用等)(1)数码管动态扫描原理多位联体的动态数码管段选信号abcdefg和dp(相当于数据线是公用的,而位选信号com是分开的。

扫描方法并不难,先把第1个数码管的显示数据送到abcdefg和dp,同时选通com1,而其它数码管的com信号禁止;延时一段时间(通常不超过10ms),再把第二个数码管的显示数据送到abcdefg和dp,同时选通com2,而其他数码管的com信号禁止;延时一段时间,再显示下一个。

注意,扫描整个数码管的频率应当保证在50Hz 以上,否则会看到明显的闪烁。

(2)TLC549ADC特征及应用等当/CS变为低电平后,TLC549芯片被选中,同时前次转换结果的最高有效位MSB (A7)自DAT端输出,接着要求自CLK端输入8个外部时钟信号,前7个CLK信号的作用,是配合TLC549 输出前次转换结果的A6-A0 位,并为本次转换做准备:在第4个CLK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个CLK 信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。

转换时间为36 个系统时钟周期,最大为17us。

直到A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS保持高电平,或者CLK 时钟端保持36个系统时钟周期的低电平。

由此可见,在自TLC549的CLK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次A/D转换开始。

(3)共阴极数码管共阴极数码管的一段连在一起接地,所以给一个高电平,相应的段位发光。

(4)按键逻辑按键逻辑是连接在P2.0到P2.7的。

当按键不按下的时候,输入为高电平,当按下按键,P2.x口与地相连,输入为低电平,所以按键是低电平有效。

3、软件设计(说明:我和另一个同学一起做的,所以在程序设计上增加了一个状态)思考题:按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。

若按键改成外部中断模式,即把按键key2连接在INT0上。

电路示意图为:而中断服务程序为:void T0INTSVC() interrupt 0{ET0=1;EX0=1;EA =1;if(mbiao<2600&&TR0==1)mbiao=mbiao+1;if(mbiao==2600)mbiao=2000;y10=mbiao/1000;y=(mbiao-y10*1000)/100;}七、总结及心得体会通过本实验课程的学习,我初步掌握了KEIL C51的基本使用方法,并能够自主连接电路,编程调试,实现各部分的功能,进而整合自己所学知识进行简单的编程,完成一系列组合实验。

与此同时,我对中断和定时有了较深入的了解,对单片机的认识也有了进一步的提高。

八、对本实验过程及方法、手段的改进建议在本实验的实现过程中有几个问题需要注意:1、数码管是采取的动态扫描,所以位选频率一定要高于50Hz才能使人眼不能看到闪烁。

2、实验软件的环境配置没有针对本地开发板进行默认配置,所以有同学会出现下载到开发板而不能运行,如果有初始配置的话,程序的调试会更加方便。

九、附录1、程序/*利用TLC549 A/D转换器实现电压测量与显示*/#include <reg51.h> //包含8051的SFR寄存器定义头文件#include <absacc.h> //扩展并行接口所需的绝对地址访问库函数#define LED_dig XBYTE[0x9000] //8位数码管显示器的位选输出控制#define LED_seg XBYTE[0x8000] //8位数码管显示器的段码(字形码)输出控制#define KEY_IN XBYTE[0x8000]//定义TLC549操作接口sbit ADC_CS = P1^7;sbit ADC_DA TA = P1^6;sbit ADC_CLK = P1^5;code unsigned char disp_seg[]= //显示段码{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x 71,0x40,0x00,0xff};// 0 1 2 3 4 5 6 7 8 9 a b c de f - blank,全亮unsigned char DispBuf[8]; //定义显示缓冲区(由定时中断程序自动扫描)unsigned char key_value; //定义按键int flag; //定义状态标志unsigned char y10,y; //定义秒表的个位,十分位unsigned short mbiao; //定义秒表计数单元void delay(int ms); //延时大约1ms unsigned char ReadAdc(void); //读取A/D转换结果void AdcInit(void); //初始化ADC接口void key_scan(void);void main(){unsigned char i=0;unsigned char volt, x100, x10, x;TMOD &= 0x0f;TMOD |= 0x10;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;ET1 = 1;TMOD &= 0xf0;TMOD |= 0x01;TH0 = 0xdc;TL0 = 0x00;TR0 = 1;ET0 = 1;EA =1;AdcInit();for(i=0; i<8; i++)DispBuf[i] = 17; //全部8位显示灭y10=2;y=0;mbiao=2000;flag=0;while(1){while(flag ==0) //初始状态—学号状态{volt = ReadAdc(); //得到A/D转换结果的数字量(0x00~0xff)volt = volt * 250/256; //转换成电压值,其中Vr=2.5Vx100 = volt/100;x10 = (volt - x100*100)/10;x = (volt - x100*100)%10;DispBuf[7] = 17;DispBuf[6] = x100;DispBuf[5] = x10;DispBuf[4] = x;DispBuf[3] = 16;DispBuf[2] = 0;DispBuf[1] = 8;DispBuf[0] = 17;delay(100);if(key_value == 8&&volt<=200){flag = 3;while(key_value == 8);}}while(flag==1) //计数状态{TR0=1;volt = ReadAdc();volt = volt * 250/256; //转换成电压值,其中Vr=2.5Vx100 = volt/100;x10 = (volt - x100*100)/10;x = (volt - x100*100)%10;DispBuf[0] = 17;DispBuf[1] = y;DispBuf[2] = y10;DispBuf[3] = 16;DispBuf[4] = x;DispBuf[5] = x10;DispBuf[6] = x100;DispBuf[7] = 17;if(key_value == 8&&volt<=200){flag = 0;while(key_value == 8);} else if(key_value == 7&&volt<=200){flag = 2;while(key_value == 7);}}while(flag==2) //计数暂停状态TR0=!TR0;if(key_value == 7){flag = 1;while(key_value == 7);}}while(flag==3) //学号状态{volt = ReadAdc(); //得到A/D转换结果的数字量(0x00~0xff)volt = volt * 250/256; //转换成电压值,其中Vr=2.5Vx100 = volt/100;x10 = (volt - x100*100)/10;x = (volt - x100*100)%10;DispBuf[7] = 17;DispBuf[6] = x100;DispBuf[5] = x10;DispBuf[4] = x;DispBuf[3] = 16;DispBuf[2] = 2;DispBuf[1] = 0;DispBuf[0] = 17;delay(100);if(key_value == 8&&volt<=200){flag = 1;mbiao=2000;while(key_value == 8);}}}}/*函数:T1INTSVC()功能:定时器T1的中断服务函数*/void T1INTSVC() interrupt 3{code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};static unsigned char n = 0;TH1 = 0xfc;TL1 = 0x66;TR1 = 1;LED_dig = 0xFF; //暂停显示if(flag==0){if(n==6)LED_seg = ~(disp_seg[DispBuf[n]]|0x80);elseLED_seg = ~disp_seg[DispBuf[n]];//更新扫描数据}if(flag==1){ if(n==6)LED_seg = ~(disp_seg[DispBuf[n]]|0x80);elseif(n==4)LED_seg = ~( disp_seg[DispBuf[n]] ); //更新扫描数据,elseLED_seg = ~disp_seg[DispBuf[n]]; //更新扫描数据}if(flag==2){LED_seg = ~disp_seg[DispBuf[n]]; //更新扫描数据}if(flag==3){if(n==6)LED_seg = ~(disp_seg[DispBuf[n]]|0x80);elseLED_seg = ~disp_seg[DispBuf[n]];//更新扫描数据}LED_dig = ~com[n]; //重新显示key_scan();n++;n &= 0x07;}void delay(int ms){unsigned int i,j;for(i=0; i<ms; i++) //延时大约1ms (fosc=11.0592MHz) {for(j=0; j<100; j++);}}/*函数:ReadAdc()功能:读取A/D转换结果返回:8位ADC代码*/unsigned char ReadAdc(void){unsigned char d; //读取得ADC结果unsigned char n; //ADC bit位计数ADC_CS = 0;n = 5;while ( --n != 0 ); //模拟tsu时间n = 8;do{d <<= 1;if ( ADC_DA TA )d = d | 0x01; //或d++;ADC_CLK = 1;ADC_CLK = 0;}while ( --n != 0 );ADC_CS = 1;return d;}/*函数:AdcInit()功能:初始化ADC接口*/void AdcInit(void){ADC_CS = 1;ADC_CLK = 0;ADC_DATA = 1;ReadAdc(); //空读一次,用于启动一次A/D转换过程}void key_scan(void){unsigned char key_in;key_in = KEY_IN;switch(key_in){case 0xff:key_value = 0;break;case ~0x01:key_value = 1;break;case ~0x02:key_value = 2;break;case ~0x04:key_value = 3;break;case ~0x08:key_value = 4;break;case ~0x10:key_value = 5;break;case ~0x20:key_value = 6;break;case ~0x40:key_value = 7;break;case ~0x80:key_value = 8;break;default:break;}}/*函数:T1INTSVC()功能:定时器T0的中断服务函数*/void T0INTSVC() interrupt 1{TR0 = 0;TH0 = 0xdc;TL0 = 0x00;TR0 = 1;if(mbiao<2600&&TR0==1)mbiao=mbiao+1;if(mbiao==2600)mbiao=2000;y10=mbiao/1000;y=(mbiao-y10*1000)/100;}。

相关文档
最新文档