数字电压表设计与制作报告(编辑修改稿)内容摘要:
6 / W R16P 3 .5 /T 115P 2 .7 /A 1 528P 2 .0 / A 821P 2 .1 / A 922P 2 .2 /A 1 023P 2 .3 /A 1 124P 2 .4 /A 1 225P 2 .5 /A 1 326P 2 .6 /A 1 427U2A T 8 9 C 5 2X1C R Y S T A LC12 2 p FC22 2 p FC31 0 u F 键盘与显示电路设计 应用系统中,设计要求不同,使用的 LED 显示器的位数也不同,因此就生产了位数,尺寸,型号不同的 LED 显示器供选择,在本设计中,选择 4 位一体的数码型 LED 显示器,简称“ 4LED”。 本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。 4LED 显示器引脚如图所示,是一个共阴极接 法的 4位 LED 数码显示管,其中 a, b, c, e, f, g为 4位 LED各段的公共输出端, 4分别是每一位的位数选端, dp 是小数点引出端, 4位一体 LED数码显示管的内部结构是由 4 个单独的 LED 组成,每个 LED 的段输出引脚在内部都并联后,引出到器件的外部。 7 4位 LED引脚 对于这种结构的 LED 显示器,它的体积和结构都符合设计要求,由于 4 位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个 I/O 接口控制)显示。 8 9 第四章 软件设计 软件组成框图 开始 初始化 调用 A / D 转换子程序 调用显示子程序 结束 软件流程图设计 启动转换 A / D 转换结束。 输出转换结果 数值转换 显示 结束 开始 10 主要程序设计 include include typedef unsigned int uint。 typedef unsigned char uchar。 /*****************端口定义 **************/ sbit CS=P3^4。 sbit CLK=P3^5。 //定义时钟信号 sbit DI=P3^6。 sbit DO=P3^6。 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 // 共阴段码表 void delay(uint xms) // 延时函数 { uint i,j。 for(i=xms。 i0。 i) for(j=110。 j0。 j)。 } void display(uchar add,uchar dat) { uchar aa=0x80。 P0=table[dat]。 //送段码 if(add==1) P0|=0x80。 P2=~(aaadd)。 //送位码 delay(1)。 P2=0xff。 } uchar AD0832(bit channel) { uchar AdcByte0,AdcByte1,i。 CLK=0。 _nop_()。 _nop_()。 DI=1。 _nop_()。 _nop_()。 CS=0。 _nop_()。 _nop_()。 CLK=1。 _nop_()。 _nop_()。 11 CLK=0。 _nop_()。 _nop_()。 DI=1。 _nop_()。 _nop_()。 CLK=1。 _nop_()。 _nop_()。 CLK=0。 _nop_()。 _nop_()。 DI=channel。 _nop_()。 _nop_()。 CLK=1。 _nop_()。 _nop_()。 CLK=0。 DI=1。 for(i=0。 i8。 i++) { AdcByte0=1。 CLK=1。 _nop_()。 _nop_()。 CLK=0。 _nop_()。 AdcByte0|=DO。 } if(DO) AdcByte1|=0x80。 for(i=0。 i7。 i++) { AdcByte1=1。 CLK=1。 _nop_()。 _nop_()。 CLK=0。 _nop_()。 if(DO) AdcByte1|=0x80。 } CS=1。 return(AdcByte0==AdcByte1?AdcByte0:0)。 } 12 void main() { uint date。 uchar AdcByte,bit0,bit1,bit2,bit3,i。 while(1) { AdcByte=AD0832(0)。 date=(AdcByte/)*5*100。 bit0=date%10。 bit1=date%100/10。 bit2=date%1000/100。 bit3=date/1000。 for(i=0。 i100。 i++) { display(3,bit0)。 display(2,bit1)。 display(1,bit2)。 display(0,bit3)。 } } } 第五章 系统调试 13 调试的方法与工具 用 keil 软件编写程序,编好程序后再进行编译,编译完成后检查程序有无错误,然后修改程序直到没有错为止,然后再与硬件联调,直到仿真出结果。 Proteus 仿真调试及效果 P 2 . 7P 2 . 6P 2 . 5P 2 . 4P2.7P2.6P2.5P2.4A02B018A13B117A24B216A35B315A46B414A57B513A68B612A79B711CE19A B / B A1U17 4 L S 2 4 512345678161514131211109R N 11kX T A L 218X T A L 119A L E30EA31P S E N29RS T9P 0 .0 /A D 039P 0 .1 /A D 138P 0 .2 /A D 237P 0 .3 /A D 336P 0 .4 /A D 435P 0 .5 /A D 534P 0 .6 /A D 633P 0 .7 /A D 732P 1 .0 /T 21P 1 .1 /T 2 E X2P 1 . 23P 1 . 34P 1 . 45P 1。数字电压表设计与制作报告(编辑修改稿)
相关推荐
24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是 12MHz,因而时钟信号的震荡频率为 12MHz。 复位电路 单片机在启动运行时都需要复位,使 CPU 和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。 其复位电路图如图 10 所示。 2 2 uR22 0 0 22uFC1GND1KR1Res3200R00Res3RETSSWPB 图 10
其中,秒钟调整按键的功能是当闹钟时间 调整 开关闭合时调整闹钟时间的秒位,XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 1 2 3 4 5 6 7 8 U1 AT89C51 SW1 SWSPST 反之对时间值的秒位进行调整,分钟调整按键的功能是当 闹钟时间调整开关 闭 合时调整闹钟时间的分位,反之对时间值的分位进行调整,时钟调整按键的功能是当
抗干扰能力强。 如图下图 AT89C51 单片机 直接 DS1302 的 RST 端,上电后, AT89C51 的 脚自动输出高电平, 作为串行时钟接口, 作为始终数据的 I/O。 DS1302 的晶振选用 32768Hz,电容推荐值为 6pF。 因为振荡频率较低,也可以不接电容,对计时精度影响不大。 10 图 23 时钟电路 DS1302 时钟芯片包括实时时钟 /日历和 31 字节的静态
时间。 加在 RST端的高电平信号要维持足够长的时间才能保证系统可靠复位。 一般来说复位方式有上电自动复位和按钮复位两种。 图 33是 AT89c51 单片机的上电复位和按钮复位组合电路。 图 33 复位电路 A/D转化 模块 现实中大多数都是模拟量,这样并不能被我们直接采用,所以人们研制了数字量的器件,它能把模拟的物理量转变成我们能够利用的数字量,这是单片机几桶收集整理转变数据的关键
计数器内部的计数功能 , 计数器的内部计数 信号 clk 和频率计数器的使能信号 enable。 频率计数器的计数模块的输出信号就是个位 sec、 十位 sec10。 电路图如 图 26 所示。 图 26 计数模块电路图 10 十进制计数器 , 它的输入端口主要包括使能端口 enable 计数输入端口clk, 输出端口主要包括计数输出端口 q 和进位输出端口 cout。 计数模块程序及仿真图
alue_buff[k]) k=j。 {temp=value_buff[k]。 value_buff[k]=value_buff[i]。 value_buff[i]=temp。 } } return value_buff[(N1)/2]。 } 算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。 这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位时经常遇到这种情况。