第一篇:23. 模拟计算器数字输入及显示
23. 模拟计算器数字输入及显示
1. 实验任务
(1. 开机时,显示“0”
(2. 第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音。
2. 电路原理图
图4.23.1 3. 系统板上硬件连线
(1. 把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;
(2. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;(3. 把“单片机系统”区域中的P0.0-P0.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上;
(4. 把“单片机系统:区域中的P2.0-P2.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; 4. 相关程序设计内容
(1. 行列式键盘输入及按键功能设定;(2. 动态数码显示;(6#include 3..
数
C
码
显语
示
言
方
式源
处
程
理
; 序
char char
code
char
dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
dispbuf[8]={0,16,16,16,16,16,16,16};
char dispbitcount;
char char char char
temp;i,j;
key;keypos;alarmflag;
*p,unsigned
char
count)while(count>0){ *(p+count)=*(p+count-1);count--;} } void { TMOD=0x01;TH0=(65536-4000)TL0=(65536-4000)TR0=1;ET0=1;EA=1;
/ %
main(void)
256;256;while(1){ P3=0xff;P3_4=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp if { temp=P3;temp=temp switch(temp){ case key=7;break;case key=8;break;case key=9;break;case key=10;break;} if((key>=0){ keypos++;if(keypos<8){ change(dispbuf,keypos);dispbuf[0]=key;} else { keypos=8;alarmflag=1;}
&
&
& &&
0x0f;
(temp!=0x0f)
0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d:
0x0b:
0x07:(key<10))} temp=P3;P1_0=~P1_0;temp=temp while(temp!=0x0f){ temp=P3;temp=temp } alarmflag=0;} }
P3=0xff;P3_5=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp if { temp=P3;temp=temp switch(temp){ case key=4;break;case key=5;break;case key=6;break;case key=11;break;} if {((key>=0)
& &
&
&
& &&
0x0f;
0x0f;
0x0f;
(temp!=0x0f)
0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d:
0x0b:
0x07:(key<10))keypos++;if(keypos<8){ change(dispbuf,keypos);dispbuf[0]=key;} else { keypos=8;alarmflag=1;} } temp=P3;P1_0=~P1_0;temp=temp while(temp!=0x0f){ temp=P3;temp=temp } alarmflag=0;} }
P3=0xff;P3_6=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp if { temp=P3;temp=temp switch(temp){ case key=1;break;case
&
& &
&
&
0x0f;
0x0f;
0x0f;
(temp!=0x0f)
0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d: key=2;break;case key=3;break;case key=12;break;} if((key>=0){ keypos++;if(keypos<8){ change(dispbuf,keypos);dispbuf[0]=key;} else { keypos=8;alarmflag=1;} } temp=P3;P1_0=~P1_0;temp=temp while(temp!=0x0f){ temp=P3;temp=temp } alarmflag=0;} }
P3=0xff;P3_7=0;temp=P3;temp=temp if { for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;
&&
&
& &
0x0b:
0x07:
(key<10))
0x0f;
0x0f;
0x0f;
(temp!=0x0f)temp=temp if { temp=P3;temp=temp switch(temp){ case key=0;break;case key=13;break;case key=14;break;case key=15;break;} if((key>=0){ keypos++;if(keypos<8){ change(dispbuf,keypos);dispbuf[0]=key;} else { keypos=8;alarmflag=1;} } temp=P3;P1_0=~P1_0;temp=temp while(temp!=0x0f){ temp=P3;temp=temp } alarmflag=0;}
& & && & & 0x0f;
(temp!=0x0f)
0x0f;
0x0e:
0x0d:
0x0b:
0x07:
(key<10))
0x0f;
0x0f;} } } void t0(void)
interrupt { TH0=(65536-4000)/ TL0=(65536-4000)
% P0=dispcode[dispbuf[dispbitcount]];P2=dispbitcode[dispbitcount];dispbitcount++;if { dispbitcount=0;} if { P1_1=~P1_1;} }
using
0
256;256;
(dispbitcount==8)
(alarmflag==1)
第二篇:Q2V8程序计算器输入数据操作方法
Q2V8程序计算器输入数据操作方法(1);
连续交点平曲线与竖曲线三维坐标正反算步骤;
进入 1 菜单
按 MENU2 进入 列表模式
按 SHIFTSET UP 设置串列文件(List File;File 1--6)
按F1设置(输入串列文件 号码;1--6 中的一个)
清除当前选定串列的数据;
按 MENU1进入RUNMAT模式
按 SHIFTPRGM调出程序功能菜单
清除命令; F6F1F3回车(清除了当前串列的全部数据)
(1)平曲线
按 MENU2进入 列表模式(输入平曲线数据)
List 1List2List3List4List5List6List7(起点桩号)(起点X坐标)(起点Y坐标)(入口缓曲参数)(圆曲半径)(出口缓曲参数)(交点转)(不输入)(交点X坐标)(交点Y坐标)(入口缓曲参数)(圆曲半径)(出口缓曲参数)(交点转角)
.....................(不输入)(终点X坐标)(终点Y坐标)
按 MENU9进入选择执行 Q2V8程序界面回车
输入1(只计算平曲线数据)XY(1)/H(2)/XYH(3)=?
显示出;平曲线总的交点个数(不包含起终点)hor-total JD num= 输入0(重新计算平曲线数据)new(0)/old(≠0)hor-JD data=?
显示出;输入平曲线 起点的交点号 hor-curve start JD num=?
输入0(要计算的起点的交点号)(机器开始计算等待.........)
查看计算的结果按 MENU2进入 列表模式(计算按结果如下JD1---JDn)List 1List2List3List4List5List6List7
(起点桩号)(起点X坐标)(起点Y坐标)(入口缓曲参数)(圆曲半径)(出口缓曲参数)(交点转角)(交点桩号)(交点X坐标)(交点Y坐标)(入口缓曲参数)(圆曲半径)(出口缓曲参数)(交点转角)
.....................(终点X坐标)(终点Y坐标)
查看转角值(度分秒)也就是(弧度制变 角度制);
按OPTNF6F2F5
第三篇:VC++课程设计 班级信息输入与显示
VC++程序设计
1.设计方案及功能描述:
本设计为一个基于对话框的应用项目(项目名称为DW)。在主对话框中设置组合框、列表框和“添加”按钮。当按下“添加”按钮后,调用一个班级信息输入的对话框(包括班级号、班级名称、学生人数、女生人数)。班级信息输入的结果在主对话框中显示,其中班级号显示在组合框,选择组合框的班级号后,班级的其他信息显示在列表框。
2.实现步骤:
2.1创建并设计对话框
新建一个名为DW的工程,在这个创建一个基本对话框的应用项目。单击对话框编辑器工具栏上的切换网格按钮,显示对话框网格。
(1)选择“File”→“New”菜单命令,在弹出的“New”对话框中,“Project”标签页面中显示了一系列的应用程序项目类型;选择MFC AppWizard(exe)的项目类型,将项目工作文件夹定位在“C:USERSADMINISTRATORDESKTOPVC++DW”,并在“Project name”编辑框中输入项目名DW,如图1所示。
图1 新建工程
(2)单击 “确定”按钮,出现如图2所示的对话框。并在类型选择栏选择选择“基本对话框”
图2 选择所创建的应用程序的类型
(3)单击“下一步”按钮,出现如图3所示的对话框在“对话框的标题是”一栏输入“班级信息输入”。
图3 输入对话框的标题
(4)完成上述步骤后,可以单击完成按钮,或者一直点击下一步直至完成基本设置。并出现下图所示的提示界面。
图4 完成基本设置后的提示信息
(5)单击确定按钮,进入如下界面:
图5 主对话框
2.2控件选择及设置
(1)打开对话框网格,参见图6的控件布局,用编辑器为主对话框添加如下图所示的一些控件。
图6主对话框的控件布局
(2)将鼠标到左边框的IDD_DW_DIALOG处并单击右键,在下拉菜单中选择插入dialog选项系统弹出如下图所示的子对话框。
图7 子对话框
(3)打开对话框网格,参见图8的控件布局,用编辑器为对话框添加如下图所示的一些控件。
图8子对话框的控件布局
(4)更改各控件的ID和名称,并添加相关属性。如下列各图所示:
(5)打开ClassWizard的Member Variable页面,或者直接按Ctrl+W组合键,在Class name中选择XMDialog,选中所需的控件号,双击或者单击Add Variaable按钮。依次为下列控件添加成员变量,如图8所。
图8 为主对话框的控件添加成员变量
同样的,为子对话框的控件添加成员变量如图9所示。
图9 为子对话框的控件添加成员变量
(6)用MFC ClassWizard为DWDialog类添加WM_INITDIALOG消息映射,并添加下列初始化代码:
BOOL CDWDlg::OnInitDialog(){ CDialog::OnInitDialog();
// Add “About...” menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0)== IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);if(pSysMenu!= NULL){
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
} } } // Set the icon for this dialog.The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE);
// Set big icon SetIcon(m_hIcon, FALSE);// Set small icon
// TODO: Add extra initialization here
return TRUE;// return TRUE unless you set the focus to a control
图10 为DWDialog类添加WM_INITDIALOG消息映射
(7)在文件DWDlg.cpp的前面添加DWDialog的包含语句: #include “DWDlg.h” #include “add.h”
(8)用MFC ClassWizard 为CDWDlg 增加IDC_ Combo1 控件的CBN_EDITCHANGE消息映射,并添加下列代码:
void CDWDlg::OnSelchangeCombo1(){ int index=m_classnb.GetCurSel();CString infor=*(CString*)m_classnb.GetItemDataPtr(index);m_classmessage.ResetContent();m_classmessage.AddString(infor);
}(9)用MFC ClassWizard 为CDWDlg 增加IDOK控件的BN_CLICKED消息映射,并添加下列代码:
void CDWDlg::OnOK(){ add a;if(a.DoModal()==IDOK){
CString id=“";
CString infor=”“;FILE* f=fopen(”recordinfor.txt“,”r“);FILE* fp=fopen(”recordid.txt“,”r“);while(!feof(f)){infor+=fgetc(f);} while(!feof(fp)){id+=fgetc(fp);} fclose(f);fclose(fp);int index;index=m_classnb.AddString(id);m_classnb.SetItemDataPtr(index,new CString(infor));}
UpdateData(true);
//CDialog::OnOK();}(10)用MFC ClassWizard 为add 增加IDOK 控件的BN_CLICKED消息映射,并添加下列代码:
void add::OnOK(){ UpdateData(true);CString infor=”“;CString id=”“;id=m_classnumber;infor+=”班级名称:“;infor+=m_classname;infor+=”rn“;infor+=”女生人数:“;infor+=m_gnumber;infor+=”rn“;infor+=”班级人数:“;infor+=m_snumber;
CDialog::OnOK();FILE* f=fopen(”recordinfor.txt“,”w+“);for(int i=0;i } fputc(infor[i],f);fclose(f);FILE* fp=fopen(”recordid.txt“,”w+“);for(i=0;i 调试成功后的结果如下图所示,单击添加按钮,就会弹出子对话框,在子对话框中输入班级信息。 图11编译运行结果 图12 输入班级信息 在输入完一组数据后单击确定,会弹出小窗口提示添加成功。 图13 提示框口 所有班级信息添加完之后,单击主对话框班级号栏的组合框会显示所有以输入信息班级的班级号,选择02号班级,主对话框的列表框就会显示该班级的全部信息。 图14 列表框显示选中班级的信息 4.心得体会 VC++课程设计的尘嚣渐渐远去,怀着对这次设计的些许不舍,怀着对当初课程设计开始时候的豪情万丈的决心的留恋,通过这次课程设计积累的信心与斗志,心里感慨万千。现在回顾两个星期以前,当一个星期前的现在,当看到老师布置给我们的这些题目时,我们都蒙了,这么难的题目我们怎么可能会编出来啊,可是埋怨是没有用的,我们只能尽我们自己最大的努力把程序给写出来,虽然知道这一路肯定是异常的艰苦,但豁出去了。上网查资料是我们迈开的第一步,看是否有类似的题目,可是泡了几个小时的网吧还是没有,我们失望而回.但是恍然一想,找学姐,学长们传授点经验啊,但是最终还是空手而归.我们真的有点绝望了,但是由于我们此刻有着年轻人的激情,冲动,火力,想了一想,求天求地求人不如求自己,所以我们决定大家在一起共同努力,分配任务去图书馆查找资料.肯定没有现成的,我们只能查相关的函数,经过两三天的努力,我们把框架弄出来了,可是还有计算和闪烁这两大难题摆在我们面前,真的是个难题,自从把框架弄好了以后就没有进展了,眼看几天都快过了,我们那个急啊,可是急也没有用。我们相信我们几个人总归可以搞定,这是我们可以坚持到现在的信念.后来我们不停地总结过去走过的弯路,回想上课时老师怎么教我们构建一个程序,要想构建一个程序,必须要有一个完整的想法,算法,大概的脑海路径,才能完整地创建一个程序.经过一个星期的学习,使我对VC语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对VC语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对VC语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。 与其临渊羡鱼,不如退而结网。这次课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。从做这个设计开始无论遇到什么困难,我都没有一丝的放弃的念头。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。我完成了这次课程设计,不过这只是我学习路上的驿站,我会继续学习它,语言本来就是相通的,just do it!语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。古语说的好:学无止境啊! 我很庆幸我圆满完成了这次设计,让我确实打开了眼界。 简易数字显示频率计的设计 摘 要:本文应用NE555构成时钟电路,7809构成稳压电源电路,CD4017构成控制电路,CD40110和数码管组成计数锁存译码显示电路,实现可测量1HZ-99HZ这个频段的数字频率计数器。 关键词:脉冲;频率;计数;控制 1 引 言 在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量显得很重要。测量频率的方法有很多,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。2 电子计数器测频方法 电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率、转速、声音的频率以及产品的计件等等。因此,数字频率计是一种应用很广泛的仪器。3 简易数字频率计电路组成框图 本设计主要运用数字电路的知识,由NE555构成时钟电路,7809构成稳压电源电路,CD4017构成控制电路,CD40110和数码管组成计数锁存译码显示电路。从单元电路的功能进行划分,该频率计由四大模块组成,分别是电源电路、时钟电路(闸门)、计数译码显示电路、控制电路(被测信号输入电路、锁存及清零)。电路结构如图1所示。 图1 简易数字频率计电路组成框图 单元模块电路设计 4.1电源电路 在电子电路中,通常都需要电压稳定的直流电源供电。小功率的稳压电源的组成如图2所示,它由电源变压器、整流电路、滤波电路和稳压电路四部分组成。 图2 电源电路 220V市电经220V/12V变压器T降压,二极管桥式整流电路整流,1000uF电容滤波后送人7809的输入端(1脚)。7809的第二脚接地,第三脚输出稳压的直流电压,C7、C8是为了进一步改变输出电压的纹波。红色发光管LED指示电源的工作状态,R9为LED的限流电阻,取值为5.1K。4.2 时钟电路 电路如图3所示,由NE555构成的多谐振电路,3脚输出振荡脉冲,其中LED为黄色发光二极管,R1为5.1K,R2为1K,R3为10K,C1,C5为100UF,C4为0.01UF,C2为1000PF,RPE选取10K。 图3 时钟电路 4.3计数、显示电路 电路中,CD40110是集十进制加减计数、译码、锁存、驱动于一体的集成电路。CPU为加法输入端,当有脉冲输入时,计数器做加法计数;CPD为减法输入端,当有脉冲输入时,计数器做减法计数。QCO为进位输出端,计数器做加法时,每计满10数后其输出一个脉冲;QBO为借位输出端,计数器做减法时,每计满10数后其输出一个脉冲。该频率计电路使用CPU输入端,在第10个脉冲信号输入时,QCO输出的进位脉冲作为计数脉冲送到高位计数器的CPU输入端。5脚R端为计数器的清零端,当此脚加上高电平信号时,计数器的输出状态为零,并使相应的数码管显示0。4.4 被测信号输入电路 NE555等构成频率为1Hz的振荡信号,由其3脚输出经非门反相后,作为控制信号加到CD4017的CP输入端,产生时序控制信号,从而实现1s内的脉冲计数(即频率检测)、数值保持及自动清零。从图4中可以看出,当非门输出端输出第一个高电平脉冲时,这个脉冲使得CD4017的Q1输出端由低电平变为高电平;在CD4017的CP输入端输入的第二个脉冲信号到来之前,Q1将一直保持高电平状态。 在Q1输出高电平时,由CD4011组成的“与”门控制电路打开,从USB与非门的另一端输入的被测脉冲信号就可以通过“与”门控制电路,进入到CD40110的CPu输入端,进行脉冲计数。通过调节电位器调整NE555的振荡频率,使得Q1输出高电平的持续时间为1s,那么在1s内的计数累计的计数脉冲个数,即为被测信号的频率。4.5频率显示电路 当USA与非门输出第二个脉冲信号时,CD4017的Q1输出端由高电平变为低电平,Q2输出端由低电平变为高电平。Q1输出端的低电平使“与”门控制电路关闭,此时由F2的另一脚输入的被测信号就不能通过,计数器不工作。因此,当第二个脉冲出现时,数显计数器停止计数。在第三个脉冲到来之前,Q2输入端保持高电平,此高电平持续时间(1s)即为数值保持时间,可在1s内读取被测信号的频率显示值。4.6计数及显示清零电路 当第三个脉冲来到时,Q2端变为低电平,Q3端输出高电平,但是由于Q3端与CD4017清零端Cr相连接,这个高电平信号使CD4017清零,Q1,Q2,Q3端全变为低电平。CD4017的Q3输出端出现的瞬时高电平信号通过二极管加到CD40110的清零端R,使计数器及数显清零,以便下次重新计数。 图4 频率计整机电路原理图 结论 从电路的工作原理可以以看出,本电路介绍的频率计的检测周期为3s,每检测一次,计数器累计时间1s,数据保持1s,清零后又保持1s,然后又开始计数、保持、清零的循环。如果感到数值保持时间过短,读数取值不方便时,可将CD4017的Q3输出端与Cr断开,使Q4与Cr清零端相连,这样数据保持时间就变为2s。 本简易数字显示频率计的设计目的是为了数字电路教学使用,使学生能够灵活使用各类常见集成电路,掌握较复杂电路的设计步骤,在频率测量上难免有很多缺陷。 参考文献 【1】王港元.电工电子实践指导.江西科学技术出版社,2005;【2】闫石.数字电子技术基础.高等教育出版社,2003;【2】王雅芳.protel99se电路设计与制版入门与提高.机械工业出版社,2011;The design of the simple frequency meter with digital display Abstracts: In this paper,the digital frequency consists of NE555 clock circuit, the 7809 regulated power supply circuit, the CD4017 control circuit, the CD40110 counting latch decoding circuit and the digital tube display circuit.It can measure the frequency of 1HZ-99HZ.Key words: Pulse, frequency ,counting, control 数字译码显示电路心得体会 在这段时间的数字电路基础实验中,我们做了3个基础实验和1个综合设计性实验,即:基本门电路的应用,编码、译码、显示电路,比较器的应用,以及数字显示电路。3个基础实验是从每一个小部分让我们熟悉了各种数字器件,然后我们再综合设计得到数字显示电路。和模拟电路实验相比较,数电实验要简单很多,因为它只有0、1两个电平,而且大多是集成电子元器件,不要再过多考虑电流电压、放大等问题,这也得益于它的稳定性、抗干扰性等优良特性。 对于基础实验我就不再过多重复了,现在我就着重讲一下我们在做综合实验过程中的情况吧。 我们小组一共有三个人,大家分工合作,她们主要做的工作是进行元器件的分配、电路的总体布置以及实验报告的总结,而我的工作是仿真和电路板的焊接,正是由于我们分工明确,在实验前也对其进行了认真的思考,再加上我们的“基础功夫”还不错,所以我们在很短的时间里完成了本次实验,而且最终的效果也是很理想的。 但是,我们在这个过程中也出现了一些小过失。 第一,材料准备不充分。由于我们购买的时间较晚,而且当时我们对这个实验也没有很清晰的想法,人云亦云,我们随着别人一起买器材,所以在后面的设计过程中我们要么就是缺电阻,或者是没支架腿。而在这个过程中,我们最重要的工具——电烙铁,氧化很严重,我们没有对其很好的处理,导致焊点不完美,也浪费时间!这是一个很值得重视的问题。俗话说得好,“磨刀不误砍柴工”。 第二,自身的心情。这个可以说算不上什么问题,但是这也是一个因素。在检测过程中,我们有时过于急躁,没看清就慌慌张张的就进行下一步,导致走了很多弯路。 对于实验本身在报告里已经很明确的又各种原理和结果了,我就不多说了。在最后,我感到很欣慰,不尽是因为最终结果的实现,更是因为组员的协调工作。下面我说一下我们的优点吧。 第一,分工明确。有些组一堆的挤在一起,要么等着,要么聊天等等,这样的进度就会很慢。可是我们就按照所需的工作分组,这样既节省了时间,而且最后检查电路的时候也会很清晰。我们也不是完全独立的个体,我们也在过程中交流,使得大家对进度和所作工作有个明确的概念。 第二,基础扎实。我们对基础知识的理解比较扎实,这样使得我们对全局的把握很好。第三,工作效率高。我们小组的成员都是女孩,又都是同一宿舍的,所以我们很容易商定实验时间,联系也比较方便。而且,大家的各方面素质很好,不必男孩弱,其他人能做到的我们也能! 总之,通过这个实验,我们对组合电路有了更深刻的理解和应用,大家都从这个过程中收获了很多,不管是知识方面的累积,还是耐心,或者是其它,不管怎样的结果,我相信,我们都从中得到了最好的!第四篇:简易数字显示频率计的设计
第五篇:数字译码显示电路心得体会