实验三 简易数字电压表设计

合集下载

简易数字电压表设计

简易数字电压表设计

本科专业学生毕业设计(论文)题目:简易数字电压表设计系别:计算机工程系专业:电子信息工程年级: 2010级学号:姓名:指导教师:摘要数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。

而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,其基本结构是由采样保持,量化,编码等几部分组成。

因此AD转换是此次设计的核心元件。

输入的模拟量经过AD转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。

本次设计的作品由于用到的模数转换芯片是ADC0832,设计系统给的供电电压为+5伏,能够测量电压范围为0到5伏之间,满足设计要求。

同时设计的精度为小数点后两位,满足要求的两位小数的精度,在不考虑AD芯片的量化误差的前提下,此次设计的精度能够满足一般测量的要求。

关键词:数字电压表;信号;AD转换;测量AbstractDVM is short for digital display voltmeter,the fundamental of DVM is converting The input analog voltage signal into digital signals,and then show the solution.The function of A/D converter is to convert the continuous change of analog signals into discrete digital signals. It comes in several parts-sampling,maintaining,quantization and coding.So the AD conversion is the core element of the design.The Input analog will be transformed by AD converter then driven by the drive display output, then get the digital voltage measurement This design work requirement for making digital voltage meter range of 0 to 5 v, due to the use of modulus conversion chip is ADC0832, The voltage of power supplied by design system is+ 5 v,At the same time, It can measure the voltage at the range of 0 to 5 v, and meet the design requirements.the precision of the design to two decimal places, meet the requirements of the precision of the two decimal places, without considering the AD chip under the premise of quantization error, the accuracy of the design can meet the requirements of general measure.Key words: DVM signals A/D converter measurement.目录第一章引言 (1)1.1 课题设计的背景及概述 (1)1.2 课题设计方案的选择 (1)1.2.1由数字电路及芯片构建 (2)1.2.2由单片机系统及A/D转换芯片构建 (2)第二章系统方案设计与论证 (3)2.1设计目标 (3)2.1.1基本功能 (3)2.1.2主要技术参数 (3)2.2设计思路与预期成果 (3)2.2.1设计思路 (3)2.2.2预期成果 (3)2.3设计方案 (4)2.4总设计框图 (4)第三章硬件设计与原理 (5)3.1电源的设计 (5)3.2单片机最小系统 (5)3.3 显示系统 (10)3.3.1 LCD1602的指令说明及时序 (11)3.3.2 LCD1602的RAM地址映射及标准字库表 (13)3.4模数转换 (14)第四章软件设计与程序 (16)4.1 软件的组成 (16)4.2 各部分软件分析 (16)4.2.1 初始化程序 (16)4.2.2 采样数据分离,显示子函数 (17)4.2.3 A/D转换子程序 (18)4.2.4 主函数 (19)第五章系统的调试 (20)5.1 软件调试 (20)5.2 显示结果及误差分析 (20)5.2.1 显示结果 (20)5.2.2 误差分析 (21)结论 (23)参考文献 (24)附录 (25)1.原件清单 (25)2.实物图 (26)3.原理图 (26)4.PCB板图 (27)5.源程序代码 (27)感谢 (32)第一章引言1.1 课题设计的背景及概述在电子测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常,而且随着电子技术的发展,更是需要经常测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。

简易电压表设计实验报告

简易电压表设计实验报告

数字电路与逻辑设计实验实验报告课题名称:简易数字电压表的设计学院:信息与通信工程学院班级:姓名:学号:班内序号:一.设计课题的任务要求设计并实现一个简易数字电压表,要求使用实验板上的串行AD 芯片ADS7816。

1. 基本要求:(1)测量对象:1~2 节干电池。

(2)AD 参考电压:2.5V。

(3)用三位数码管显示测量结果,保留两位小数。

(4)被测信号超过测量范围有溢出显示并有声音提示。

(5)按键控制测量和复位。

2. 提高要求:(1)能够连续测量。

(2)自拟其他功能。

二. 系统设计(包括设计思路、总体框图、分块设计)1. 设计思路本次实验利用ADS7816作为电压采样端口,FPGA作为系统的核心器件,用LED数码管进行已测电压值的显示,先把读取的12位串行二进制数据转换成并行的12位二进制数据,然后再把并行的12位二进制数据转换成便利于输出的3位十进制BCD码送给数码管,以显示当前测量电压值。

这些工作由ADS7816转换控制模块、数据转换控制模块、译码显示模块完成。

2. 总体框图3. 分块设计3.1 ADS7816转换控制模块(1)ADS7816工作原理在ADS7816的工作时序中,串行时钟DCLK用于同步数据转换,每位转换后的数据在DCLK 的下降沿开始传送。

因此,从Dout引脚接收数据时,可在DCLK的下降沿期间进行,也可以在DCLK的上升沿期间进行。

通常情况下,采用在DCLK的上升沿接收转换后的各位数据流。

CS 的下降沿用于启动转换和数据变换,CS有效后的最初1至2个转换周期内,ADS7816采样输入信号,此时输出引脚Dout呈三态。

DCLK的第2个下降沿后,Dout使能并输出一个时钟周期的低电平的无效信号。

在第4个时钟的上升沿,Dout开始输出转换结果,其输出数据的格式是最高有效位(B11位)在前。

当最低有效位(B0位)输出后,若CS变为高电位,则一次转换结束,Dout显三态。

(2)元件设计:en:A/D转换启动键,输入。

简易数字电压表设计,单片机实验。

简易数字电压表设计,单片机实验。
(2) 用 C51 编写代码,实现一个数字式直流电压测量表,将测量到的直流电 压值在 LCD 上显示;
(3) 采用 Keil 和 Proteus 联合调试代码,查看仿真结果; (4) 将编程代码通过 STC-ISP 程序下载到 MCU Flash 中运行,并观察运行结
果。
3. 实训要求
(1) 依照 EDP 实验箱的接口设计,在任务三、四的基础上补充 AD 采集电路 的绘制,可以仿真 EDP 实验箱的相应硬件模块;
lcd1602_com(0x82); lcd1602_Data(0x2e);
lcd1602_com(0x81); lcd1602_Data(DATA[temp/10]);
START=1; START=0; }
} } void delay_1ms() {
int n=100; while(n--); } void lcd1602_com(unsigned char com)
OE=1; temp=P0; temp=temp*a*100; lcd1602_com(0x84); lcd1602_Data(DATA[temp%10]);
temp=temp/10; lcd16DATA[temp%10 ]);
简易数字电压表设计
1. 任务目的
(1) 熟悉 SPI 接口协议; (2) 掌握 TLC1543 A/D 转换器的工作原理及使用方法; (3) 熟悉掌握 TL431 基准电压源的工作原理; (4) 掌握直流电压表的工作原理与实现方法。
2. 实验内容
(1) 参考 EDP 实验箱 AD 模块电路,在 Proteus 中采用 TLC1543 和 TL431 设 计一个 AD 采样电路;
a=0.0196;
OE=0; START=0; START=1; START=0;

简易数字电压表单片机课程设计报告

简易数字电压表单片机课程设计报告

目录摘要及关键词 (2)一、实现方案 (3)1.硬件选择方案 (4)2.程序设计 (12)二、系统的测试与结果 (17)三、调试过程及问题解决方法 (18)四、课题设计的收获及心得 (18)参考文献 (18)摘要:本课题实验主要采用MCU-8088/8086H芯片、8255和ADC0809芯片来完成一个简易的数字电压表,能够对输入的0~5 V的模拟直流电压进展测量,并通过一个4位一体的7段LED数码管进展显示,测量误差约为0.02 V。

该电压表的测量电路主要由三个模块组成:A/D转换模块、数据处理模块及显示控制模块。

A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。

数据处理那么由芯片MCU-8088/8086H来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进展显示;另外它还控制着ADC0809芯片的工作。

显示模块主要由7段数码管及相应的驱动芯片(74HC245)组成,显示测量到的电压值。

关键词:简易数字电压表、ADC0809、MCU-8088/8086H。

.实现方案:本实验采用MCU-8088/8086H单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电压表,原理电路如图1-1所示。

该电路通过ADC0809芯片采样输入口IN0输入的0~5 V的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给MCU-8088/8086H芯片的AD0~AD7。

MCU-8088/8086H负责把接收到的数字量经过数据处理送给8255的PA口在送给数码管的KD0~KD7,产生正确的7段数码管的显示段码。

同时8255的PB0~PB3还通过控制数码管的KL1~KL4产生位选信号,控制数码管的亮灭。

另外,还控制着ADC0809的工作。

图1-1 电路原理图图1-2 系统框图硬件选择方案:一.实验所需元器件:1. MCU-8088/8086H芯片1块2. ADC0809芯片1块3. 8255芯片1块4. 4位一体数码1个15.导线假设干课程设计---简易数字电压表〔二〕二.主要元器件的介绍课程设计---简易数字电压表〔三〕2)ADC0809芯片介绍1.模数转换芯片ADC0809:ADC0809是典型的8位8通道逐次逼近式A/D转换器,其实物如图1-3所示。

综合实验三 位直流数字电压表

综合实验三    位直流数字电压表

综合实验三213位直流数字电压表一、实验目的 1、了解双积分式A / D 转换器的工作原理2、熟悉213位A / D 转换器CC14433的性能及其引脚功能3、掌握用CC14433构成直流数字电压表的方法二、实验原理直流数字电压表的核心器件是一个间接型A / D 转换器,它首先将输入的模拟电压信号变换成易于准确测量的时间量,然后在这个时间宽度里用计数器计时,计数结果就是正比于输入模拟电压信号的数字量。

1、V -T 变换型双积分A / D 转换器图3-1是双积分ADC 的控制逻辑框图。

它由积分器(包括运算放大器A 1 和RC 积分网络)、过零比较器A 2,N 位二进制计数器,开关控制电路,门控电路,参考电压V R 与时钟脉冲源CP图3-1 双积分ADC 原理框图转换开始前,先将计数器清零,并通过控制电路使开关 S O 接通,将电容C 充分放电。

由于计数器进位输出Q C =0,控制电路使开关S 接通v i ,模拟电压与积分器接通,同时,门G 被封锁,计数器不工作。

积分器输出v A 线性下降,经零值比较器A 2 获得一方波v C ,打开门G ,计数器开始计数,当输入2n个时钟脉冲后t =T 1,各触发器输出端D n-1~D O 由111…1回到000…0,其进位输出Q C =1,作为定时控制信号,通过控制电路将开关S转换至基准电压源-V R ,积分器向相反方向积分,v A 开始线性上升,计数器重新从0开始计数,直到t =T 2,v A 下降到0,比较器输出的正方波结束,此时计数器中暂存二进制数字就是v i 相对应的二进制数码。

2、213位双积分A / D 转换器CC14433的性能特点 CC14433是CMOS 双积分式213位A / D 转换器,它是将构成数字和模拟电路的约7700多个MOS 晶体管集成在一个硅芯片上,芯片有24只引脚,采用双列直插式,其引脚排列与功能如图18-2所示。

图3-2 CC14433引脚排列引脚功能说明:V AG (1脚):被测电压V X 和基准电压V R 的参考地V R (2脚):外接基准电压(2V 或200mV )输入端V X (3脚):被测电压输入端R 1(4脚)、R 1 /C 1(5脚)、C 1(6脚):外接积分阻容元件端C 1=0.1μf (聚酯薄膜电容器),R 1=470K Ω(2V 量程);R 1=27K Ω(200mV 量程)。

实验三 简易数字电压表设计共7页文档

实验三 简易数字电压表设计共7页文档

电子系统实验报告实验三简易数字电压表设计姓名张巧玲指导教师贾立新课程电子系统设计与实践专业班级自动化1004班学院信息工程学院一、设计题目采用C8051F360单片机最小系统设计一简易数字电压表,实现对0~2.4V直流电压的测量,原理框图如图1所示。

模拟输入电压通过一只1 kΩ电位器产生,采用C8051F360 单片机内部的A/D 转换器将模拟电压转换成数字量后换算成电压值,用十进制的形式在LCD 上显示。

A/D 转换的输入模拟信号由实验板PR3 电位器产生的0~3.3V 的直流电压信号,用一根杜邦实验线将J8 的0~3.3V 输出插针与J7 口的P2.0 插针相连。

注意A/D 转换器模拟输入电压的范围取决于其所选择的参考电压,如果A/D 转换器选择内部参考电压源,其模拟电压的范围为0~2.4V,如果选择外部电源作为参考电压,则其模拟输入电压范围为0~3.3V。

测试时,A/D转换器的模拟输入信号可通过一个电位器产生。

图1 简易数字电压表实验示意框图二.设计方案(1)简易数字电压表设计程序流程图如图2所示。

图2 简易数字电压表设计程序中A/D转换和计时流程图(2)简易数字电压表实验板连接图如图3所示。

此外,还需用一根杜邦实验线将J8 的0~3.3V 输出插针与J7 口的P2.0 插针相连。

图3简易数字电压表设计实验板接线图三、详细设计1.简易数字电压表设计相应C8051F360和LCD初始化程序⑴内部振荡器初始化:OscInit()⑵ I/O端口初始化:PortIoInit()⑶外部数据存储器接口初始化:XramInit()⑷定时器初始化:TimerInit()⑸中断系统初始化:Int0Init()⑹ ADC0初始化:void ADC_Init()⑺ PCA初始化:Int0Init()2.电压转换方式将电压转换成十进制:AT=ADC0H*256+ADC0L;volt=AT*3.31/1024;voltage=volt*1000;for(i=0;i<4;i++)v[i]=voltage%10;voltage=voltage/10;3. LCD显示接口的设计当时间到达设定值,即0.5s后,执行以下程序将所测的电压值在LCD屏幕上第三排显示出来。

简易数字电压表课程设计

简易数字电压表课程设计

简易数字电压表课程设计一、课程目标知识目标:1. 学生能够理解电压表的基本工作原理和电路连接方式;2. 学生能够掌握简易数字电压表的使用方法和读数技巧;3. 学生能够了解电压的单位换算,并能进行简单的计算。

技能目标:1. 学生能够正确连接电压表的电路,并进行电压测量;2. 学生能够通过操作简易数字电压表,准确读取电压值,并记录数据;3. 学生能够运用所学知识解决实际电路中的电压问题。

情感态度价值观目标:1. 培养学生对电子测量工具的兴趣,激发学习电子技术的热情;2. 培养学生严谨、细致的实验态度,注重实验操作的规范性和安全性;3. 培养学生团队合作精神,学会分享和交流实验过程中的心得体会。

课程性质分析:本课程为电子技术基础课程,以实验为主,结合理论教学。

简易数字电压表是电子测量工具的基础,通过本课程的学习,使学生掌握基本的电压测量方法。

学生特点分析:学生为初中生,具备一定的物理知识和实验操作能力。

学生对电子技术感兴趣,但可能对电压表的使用方法和电路连接不够熟悉。

教学要求:1. 理论与实践相结合,注重实验操作技能的培养;2. 注重启发式教学,引导学生主动探究和解决问题;3. 关注学生的个体差异,提供个性化指导,确保每个学生都能达到课程目标。

二、教学内容1. 电压表基本原理:讲解电压表的工作原理,包括磁电式电压表和数字电压表的区别与联系,重点介绍数字电压表的原理和特点。

教材章节:第二章第二节《电压表的原理与使用》2. 电压表的使用方法:详细讲解电压表的电路连接方法,操作步骤,读数技巧以及注意事项。

教材章节:第二章第三节《电压表的使用与维护》3. 电压单位换算:介绍电压的单位制,换算关系,并进行实际计算。

教材章节:第一章第四节《电学单位制》4. 实际电路电压测量:设计实际电路,指导学生运用电压表进行电压测量,分析测量结果。

教材章节:第二章第四节《电压测量》5. 数字电压表操作练习:安排学生进行数字电压表的实操练习,巩固所学知识,提高操作技能。

简易数字电压表的设计(ADC0809)

简易数字电压表的设计(ADC0809)

简易数字电压表的设计(4人)一、设计目的进一步加深理解模拟电子技术、数字电子技术、单片机原理与应用等课程的基础知识,掌握一些小型电子系统的设计方法和制作过程的能力;培养学生们的科学性、系统性、及全面性的设计素质;开拓学生的设计思路,增强他们把理论知识与实践相结合的能力;为毕业后从事电子设备控制电路设计、调试、维修奠定基础。

二、设计要求1.功能要求设计并制作一个简易数字电压表,可以测量0~5V范围内的8路输入电压值,并在4位LED数码管上轮流显示或单路选择显示,其中1位为显示通道号。

其测量最小分辨率为0.02V。

2.设计内容(1)根据设计功能要求,确定CPU的选型与硬件接口配置。

(2)进行硬件设计,主要是整个系统电路原理图的绘制和对应的PCB板的布线设计。

(3)进行软件设计,根据控制要求编写控制系统的控制程序。

(4)控制系统调试。

(5)源程序。

三、主要元器件ADC0809、数码管、三极管、发光二极管、总线驱动器、电位器、按键、电阻、电容、导线、万能板等四、设计报告要求1、方案论证及方框图。

2、单元电路设计细则。

3、调试及性能分析。

4、系统的电原理图。

5、电子元器件清单。

6、源程序清单。

7、参考资料。

8、收获。

五、教材及参考书[1] 潘永雄. 新编单片机原理与应用(第二版). 西安:西安电子科技大学出版社,2007年[2] 余永权.单片机应用系统的功率接口技术. 北京:北京航空航天大学出版社,1992[3] 孙涵芳.MCS-51/96系列单片机原理与应用. 北京:北京航空航天大学出版社,1996[4] 丘关源编.电路分析基础.高等教育出版社. 1999年[5] 童诗白编.模拟电子技术基础.高等教育出版社.1999年[6]阎石编.数字电子技术基础.高等教育出版社.1997年[7] [8]刘文涛编.MCS-51单片机培训教程 C51版.电子工业出版社.2006年六、课程设计进度安排注:设计说明书使用课程设计报告本书写,每人一份,独立完成。

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

电子系统实验报告实验三简易数字电压表设计姓名张巧玲指导教师贾立新课程电子系统设计与实践专业班级自动化1004班学院信息工程学院一、设计题目采用C8051F360单片机最小系统设计一简易数字电压表,实现对0~2.4V直流电压的测量,原理框图如图1所示。

模拟输入电压通过一只1 kΩ电位器产生,采用C8051F360 单片机内部的A/D 转换器将模拟电压转换成数字量后换算成电压值,用十进制的形式在LCD 上显示。

A/D 转换的输入模拟信号由实验板PR3 电位器产生的0~3.3V 的直流电压信号,用一根杜邦实验线将J8 的0~3.3V 输出插针与J7 口的P2.0 插针相连。

注意A/D 转换器模拟输入电压的范围取决于其所选择的参考电压,如果A/D 转换器选择内部参考电压源,其模拟电压的范围为0~2.4V,如果选择外部电源作为参考电压,则其模拟输入电压范围为0~3.3V。

测试时,A/D转换器的模拟输入信号可通过一个电位器产生。

图1 简易数字电压表实验示意框图二.设计方案(1)简易数字电压表设计程序流程图如图2所示。

图2 简易数字电压表设计程序中A/D转换和计时流程图(2)简易数字电压表实验板连接图如图3所示。

此外,还需用一根杜邦实验线将J8 的0~3.3V 输出插针与J7 口的P2.0 插针相连。

图3简易数字电压表设计实验板接线图三、详细设计1.简易数字电压表设计相应C8051F360和LCD初始化程序⑴内部振荡器初始化:OscInit()⑵ I/O端口初始化:PortIoInit()⑶外部数据存储器接口初始化:XramInit()⑷定时器初始化:TimerInit()⑸中断系统初始化:Int0Init()⑹ ADC0初始化:void ADC_Init()⑺ PCA初始化:Int0Init()2.电压转换方式将电压转换成十进制:AT=ADC0H*256+ADC0L;volt=AT*3.31/1024;voltage=volt*1000;for(i=0;i<4;i++){v[i]=voltage%10;voltage=voltage/10;}3. LCD显示接口的设计当时间到达设定值,即0.5s后,执行以下程序将所测的电压值在LCD屏幕上第三排显示出来。

WriteCom(0x8C);WriteData(v[3]+0x30);WriteData(0x2e);WriteData(v[2]+0x30);WriteData(v[1]+0x30);WriteData(v[0]+0x30);4.实验中AD转换方式选用逐次逼近型,A/D转换完成后得到10位数据分为高低字节存放在寄存器ADCOH和ADC0L中,此处选择右对齐,转换时针为2MHZ。

5.选择内部参考电压2.4伏为基准(在实际单片机调试中改为3.311伏),正端接P2.0,负端接地。

四、测试结果在0V~3.3V中取十组测试数据,每组间隔约为0.3V左右,实验数据如表由表1可知,10组数据中最大误差的一组是:其余的误差都不超过,并且大部分数据误差都只有左右,满足小于0.01V的设计误差要求,即本实验的设计可以满足实验要求。

五、心得体会通过这次对简易电压表的设计,我对单片机的最小系统设计有了新的理解,对于硬件和软件的配合也更熟练了。

在这个实验中LCD显示模块的CPLD部分由FPGA充当,芯片本身自带程序,因而这个部分不需要再通过QUARTUS 软件进行编程。

在参考电压选择过程中发现,单片机实际最大电压并不是2.4v而是3.3v,则在转换中将3.3V替换2.4V即可。

六.代码附录/*简易数字电压表*/#include <C8051F360.H>#define uchar unsigned char#define uint unsigned int#define WCOMADDR 0xC008 //写命令寄存器的地址#define WDATADDR 0xC009 //写数据寄存器的地址#define RCOMADDR 0xC00A //读命令寄存器的地址#define RDATADDR 0xC00B //读数据寄存器的地址#define KEYCS 0xC00Cuchar code hanzi[] = "简易数字电压表";uchar code keynum[]="键值";uchar code keyc[]="次数";uint time=0;float volt;uint v[4];uint AT,voltage;uchar keyn,keycode;void OscInit(); //内部振荡器初始化void PortIoInit(); //I/O端口初始化void XramInit(); //外部数据存储器接口初始化void PcaInit(); //PCA初始化(设置看门狗定时器的工作状态)void InitDevice(); //内部资源初始化void CheckLcd(); //检查LCD是否空闲子程序void WriteCom(uchar n); //Lcd写指令子程序void WriteData(uchar m); //Lcd写数据子程序void InsitiLcd(); //Lcd初始化子程序void DispHan( uchar code *a,uchar m,uchar k);//显示汉字子程序void TimerInit(); //定时器初始化void InterruptsInit(); //中断系统初始化void ADC_init(); //ADC0初始化详见书本P144 void Int0Init(); //外部中断初始化void main(){uchar i;InitDevice(); //F360初始化InsitiLcd(); //LCD模块初始化ADC_init();DispHan(hanzi,0x90,0x0e); //显示“键盘显示测试程序”AD0BUSY=1;while(1){if(TF0==1){TF0=0;TL0=0xf0;TH0=0xd8; //重置时间常数10mstime++;}if(time >=49){time = 0;AT=ADC0H*256+ADC0L;volt=AT*0.003234;voltage=volt*1000;for(i=0;i<4;i++){v[i]=voltage%10;voltage=voltage/10;}WriteCom(0x8d);WriteData(v[3]+0x30);WriteData(0x2e);WriteData(v[2]+0x30);WriteData(v[1]+0x30);WriteData(v[0]+0x30);TR0=1;AD0BUSY=1;}}}void ReadKey() interrupt 0{uchar xdata *addr;uchar c1,c2;addr=KEYCS;keycode=*addr;keycode&=0x0F;keyn++;DispHan(keynum,0x88,0x04);WriteCom(0x8b);if(keycode<10){WriteData(0x30);WriteData(keycode+0x30);}else{c1=keycode%10;c2=keycode/=10;WriteData(c2+0x30);WriteData(c1+0x30);}DispHan(keyc,0x98,0x04);WriteCom(0x9b);if(keyn==10)keyn=0;WriteData(keyn+0x30);}void Int0Init(){EA=1;IT01CF=0x05;EX0=1;IT0=1;}void OscInit(void) //内部振荡器初始化{SFRPAGE=0x0f; //选择特殊功能寄存器页地址OSCICL=OSCICL+4;OSCICN=0xc2; //允许内部振荡器,频率除2作为SYSCLK=12MHzCLKSEL=0x00; //选择内部振荡器SFRPAGE=0x00;}void ADC_init(){ADC0CF=0x28; // 选择内部参考电压2.4V为基准ADC0CN=0x80; //正端接P2.0AMX0P=0x08; //负端接地AMX0N=0x1F; //右对齐,转换时针为2MHZREF0CN=0x08; //写AD0BUSY启动A/D转换器}void TimerInit(){TMOD=0x01;TH0=0xd8;TL0=0xf0;TR0=1;}void InterruptsInit(void){EA=1;ET0=1;EX0=1;PX0=1;IE0=0;}void PortIoInit(void) //I/O口初始化{SFRPAGE=0x0f;P0MDIN=0xe7; //P0.3、P0.4模拟量输入P0MDOUT=0x83; //P0.0、P0.1、P0.7推拉式输出P0SKIP=0xf9; //P0.1、P0.2被交叉开关跳过P1MDIN=0xff; //P1设置为数字量输入P1MDOUT=0xff; //P1设置为推拉式输出P1SKIP=0xff; //P1被交叉开关跳过// P2MDIN=0xff; //P2设置为数字量输入// P2MDOUT=0xff; //P2设置为推拉式输出// P2SKIP=0xff;P3MDIN=0xff; //P3设置为数字量输入P3MDOUT=0xff; //P3设置为推拉式输出P3SKIP=0xff;P4MDOUT=0xff; //P4.5设为OC输出,其余推拉式输出XBR0=0x01; //使能UARTXBR1=0xC0; //禁止弱上拉,交叉开关允许SFRPAGE=0x00;return;}void XramInit(void) //外部数据储存器初始化{SFRPAGE=0x0f;EMI0CF=0x07; //引脚复用方式SFRPAGE=0x00;return;}void PcaInit(void) //PCA初始化{PCA0CN=0x40; //允许PCA计数器/定时器PCA0MD=0x00; //禁止看门狗定时器return;}void InitDevice(void){OscInit();PortIoInit();XramInit();//SmbInit();//UartInit();ADC_init();TimerInit();InterruptsInit();Int0Init();PcaInit();return;}void CheckLcd(){uchar temp = 0x00;uchar xdata *addr;while (1){addr=RCOMADDR;temp=*addr;temp &= 0x80;if(temp == 0x00)break;}}void WriteCom(uchar n){uchar xdata *addr;CheckLcd();addr=WCOMADDR;*addr=n;}void WriteData(uchar m){uchar xdata *addr;CheckLcd();addr=WDATADDR;*addr = m;}void InsitiLcd(){WriteCom(0x30); //设为基本指令集WriteCom(0x01); //清屏WriteCom(0x0c); //开整体显示}void DispHan( uchar code *a,uchar m,uchar k) // 书本177页有详细解释 {uchar dat, i, j, length;length = k/2;WriteCom(m);for (i=0;i < length;i++){j = 2*i;dat = a[j];WriteData(dat);dat = a[j+1];WriteData(dat);}WriteData(0x3a);}void DispShu( unsigned int a,uchar m){WriteCom(m);WriteData(a+0x30);}。

相关文档
最新文档