数码管显示乘法口诀.docx
《数码管显示乘法口诀.docx》由会员分享,可在线阅读,更多相关《数码管显示乘法口诀.docx(21页珍藏版)》请在冰豆网上搜索。
数码管显示乘法口诀
院系:
医药信息工程学院
班级:
10电子信息工程
组员:
黄冰
李美静
韩上土
课程设计
题目:
数码管显示乘法口诀
目录
1.绪论......................................................................4
1.1单片机基础知识.......................................5
1.2单片机应用领域.......................................6
1.3单片机发展趋势...................................7
2.应用系统硬件设计……………………………………….8
2.151硬件系统电路图....................................................................................9
2.251单片机最小系统原理图..................................................................................9
2.374LS245..................................................................................10
2.46位共阴极数码管....................................................................................10
2.5按键...................................................................................11
2.6反相器HEF4069UBP
3.单元电路模块设计................................................12
3.1数码管显示原理....................................................................................12
3.2晶振电路....................................................................................14
3.3LED数码管仿真显示程序……………………………………16
3.4源程序.........................................................................................19
4.结束语......................................21
参考文献.................................................................22
1.绪论
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。
顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。
它的出现是近代计算机技术发展史上的一个重要里程碑,因为它体积小,通常都藏在被控机械的“肚子”里。
它在这个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。
单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
现在,这种单片机的使用领域已十分广泛。
彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。
单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。
单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。
1.1单片机基础知识
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲,一块芯片就成了一台计算机。
MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。
MCS-51系列单片机主要包括8031、8051和8751等通用产品。
DP-51S单片机仿真实验仪是由广州致远电子有限公司设计的DP系列单片机仿真实验仪之一,是一种功能强大的单片机应用技术学习、调试。
1.2单片机的应用领域
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分为如下几个范畴:
一、在智能仪器仪表的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
例如精密的测量设备(功率计,示波器,各种分析仪)。
二、在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
三、在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。
例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
四、在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
五、单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
此外,单片机在工商、金融、科研、教育、国防航空等领域都有着十分广泛的用途。
1.3单片机的发展趋势
单片机现在可以说是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供了广阔的天地。
纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:
一、微型单片化
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。
甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。
此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。
现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。
二、低功耗CMOS化
MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。
像80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。
CMOS虽然功耗低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于要求低功耗像电池供电的应用场合。
所以这种工艺将是今后一段时期单片机发展的主要途径。
三、主流与多品种共存
现在虽然单片机的品种繁多,各具特色,但仍以80C51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的Winbond系列单片机。
所以80C51占据了半壁江山。
而Microchip公司的PIC精简指令集合(RISC)也有着强劲的发展势头,中国台湾的HOLTEX公司近年的单片机产量与日俱增,与其底价质优的优势,占据一定的市场份额。
此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。
在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补、相辅相成、共同发展的道路。
2应用系统硬件设计
2.1硬件系统电路图
以下是应用系统硬件的构成图,共由7部分构成。
1、单片机小系统包括:
(1)复位电路;
(2)时钟电路;(3)80C52。
2、74LS245:
1个3、6位共阴极数码管:
1个
4、按键:
10个5、反相器HEF4069UBP:
1个
系统构成图(单片机最小系统略)
2.251单片机最小系统原理图。
1、震荡器(时钟电路)
单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:
电路将无法通信。
他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振和瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。
2、复位端(复位电路)
给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:
上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,这时如果手按着一直不放,系统将一直复位,不能正常工作,在这里我们需要注意用的电容是电解电容,是有正负的,如果接反了,他就会爆炸。
2.374LS245
74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。
*74LS245还具有双向三态功能,既可以输出,也可以输入数据。
*当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
*当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)
*DIR=“1”,信号由A向B传输;(发送)当/CE为高电平时,A、B均为高阻态。
由于P2口始终输出地址的高8位,接口时74LS245的三态控制端/1G和/2G接地,P2口与驱动器输入线对应相连。
P0口与74LS245输入端相连,/E端接地,保证数据现畅通。
8051的/RD和/PSEN相与后接DIR,使得/RD或/PSEN有效时,74LS245输入(P0.i←Di),其它时间处于输出(P0.i→Di)。
2.46位共阴极数码管:
2.5按键:
2.6反相器HEF4069UBP
3单元电路模块设计
3.1数码管显示原理
我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反。
如下图。
共阳极的数码管0~f的段编码是这样的:
unsignedcharcodetable[]={//共阳极0~f数码管编码
0xc0,0xf9,0xa4,0xb0,//0~3
0x99,0x92,0x82,0xf8,//4~7
0x80,0x90,0x88,0x83,//8~b
0xc6,0xa1,0x86,0x8e//c~f
};
共阴极的数码管0~f的段编码是这样的:
unsignedcharcodetable[]={//共阴极0~f数码管编码
0x3f,0x06,0x5b,0x4f, //0~3
0x66,0x6d,0x7d,0x07, //4~7
0x7f,0x6f,0x77,0x7c, //8~b
0x39,0x5e,0x79,0x71 //c~f
};
3.2晶振电路设计
为了提高振荡频率的稳定度,可以使用晶体或陶瓷(Cer-amic)振荡子等压电元件。
此除了可以应用于高频率振荡电路以外,尚可以使用于钟表与计数器等基准时间产生电路。
压电元件为利用机械振动与电气振动间的相互转换的作用,而且其固有振动数是由几何尺寸所决定的。
图25所
示的为晶体的电气特性。
(由于使用振荡器,可以使频率更为稳定。
振荡领域为在串联谐振点fs与并联谐振点fp之间。
)
图(a)所示的为其等效电路,图(b)所示的为其电抗(Resistance)特性。
fs为串联谐振频率点fp为并联谐振频率点,其谐振频率分别如下:
,
将晶体与陶瓷振荡器此较,陶瓷振荡器的电感性范围fs~fp为晶体的数十倍。
因此,陶瓷振荡器的频率稳定度比晶体差一些。
3.3LED数码管仿真显示程序
在电子设备上广泛地使用LED数码管显示数据,在许多应用软件中也经常模拟LED数码管显示数据,使程序画面看起来很有特色。
使用Delphi程序实现LED数码管的仿真显示非常容易,具体步骤如下:
1.启动Delphi4.0。
在“Tools”工具菜单上选择Delphi的图象编辑器“ImageEditor”,建立一个新的位图,并设定位图的尺寸,宽为:
48,高为:
64。
设定位图的底色为紫红色,前景色为红色。
在位图上选择适当宽度的线条画出一个正方的8字,并将方型8字的各个拐角处用斜线断开,这样可使图象模拟的更加真实。
完成后按文件名bitmap_0.bmp存储。
然后用此文件复制9个文件,文件名分别为bitmap_1—9。
用图象编辑器将这些方形的8字位图按文件名序号的顺序分别修改成0-9的数字位图,存储后备用。
2.建立一个新的工程,在窗体Form1上添加“面板”元件Panel1,设定“面板”元件的属性:
bevelouter=bmRaised;bvevelInner=bvLowered;BorderWidth=4,设置后在Panel1元件上形成一个凸起的边框。
在Panel1上添加一个“画板”元件PaintBox1,将PaintBox1的属性Hight和Width设定为64和318,并适当调整Panel1面板的尺寸,使其正好包围画板元件。
3.在窗体中添加一个“图象列表”元件ImageList1,在元件上双击鼠标,调出添加图象对话框,将先前制作好的位图bitmap_0至bitmap_9按顺序添加进图象列表元件中去,使图象列表中位图的序号与位图本身代表的数字相同,并注意将位图设定为不透明。
4.转到单元编辑窗口,在Tform1的类说明部分添加一个显示LED的过程说明语句:
proceduredisplay_LED(number:
integer);。
在implementation语句下面添加一个全局变量和对应上面过程说明的过程体。
内容如下:
implementation
{$R*.DFM}
var
dis_number:
integer;
procedureTform1.display_LED(number:
integer);
var
I:
integer;
digital:
array[0..5]ofinteger;
begin
{限制显示位数小于6位}
ifnumber>999999thennumber:
=0;
forI:
=0to5dodigital[I]:
=0;
{分离数字位}
I:
=0;
while(number)>0do
begin
digital[I]:
=numbermod10;
number:
=numberdiv10;
I:
=I+1;
end;
{显示数字}
forI:
=5downto0do
imagelist1.draw(paintbox1.canvas,(5-I)*54,0,digital[I]);
end;
3.4源程序代码
//名称:
数码管显示乘法口诀
//说明:
每按下一次按键时会显示一个数字,用a键表示输入完毕,第1,3位数码管显示被乘法与乘数,第4位数码管显示等号,第5,6位数码管显示乘积
#include
#defineucharunsignedchar
#defineuintunsignedint
sbita=P1^0;
ucharb,c,res;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x00,0x48
};//共阴极数码管,最后两个是关闭与等号
voiddelayms(uintxms)//延时程序
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay(ucharnum)
{
P0=table[num];
}
ucharmatrixkeyscan()//按键扫描子程序
{
uchartemp,key;
P3=0xfe;//判断P3.0行是否有按键被按下
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)//
{delayms(10);//
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)//
{
temp=P3;//
switch(temp)//判断哪一列被按下
{
case0xee:
key=0;
break;
case0xde:
key=1;
break;
case0xbe:
key=2;
break;
key=3;
break;
}
while(temp!
=0xf0)//等待按键释放
{temp=P3;
temp=temp&0xf0;
}
//display(key);//显示
}returnkey;
}
P3=0xfd;//判断P3.1行是否有按键被按下
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)//
{
delayms(10);//
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)//
{
temp=P3;//
switch(temp)//判断哪一列被按下
{case0xed:
key=4;
break;
case0xdd:
key=5;
break;
case0xbd:
key=6;
break;
case0x7d:
key=7;
break;
}
while(temp!
=0xf0)//等待按键释放
{
temp=P3;
temp=temp&0xf0;
}
//display(key);//显示
}returnkey;
}
P3=0xfb;//判断P3.2行是否有按键被按下
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)//
{delayms(10);//
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)
{
temp=P3;
switch(temp)//判断哪一列被按下
{case0xeb:
key=8;
break;
case0xdb:
key=9;
break;
case0xbb:
key=10;
break;
case0x7b:
key=11;
break;
}
while(temp!
=0xf0)//等待按键释放
{temp=P3;
temp=temp&0xf0;
}
//display(key);//显示
}returnkey;
}
P3=0xf7;//判断P3.3行是否有按键被按下
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)//
{delayms(10);//
temp=P3;//
temp=temp&0xf0;//
if(temp!
=0xf0)
{
temp=P3;
switch(temp)//判断哪一列被按下
{case0xe7:
key=12;
break;
case0xd7:
key=13;
break;
case0xb7:
key=14;
break;
case0x77:
key=15;
break;
}
while(temp!
=0xf0)//等待按键释放
{temp=P3;
temp=temp&0xf0;
}
//display(key);//显示
}returnkey;
}
}
voidmain()
{
while(a!
=0)
{
b=matrixkeyscan();
P2=0x01;//位选选中第一个数码管
delayms(5);//这个重要
display(b);
}
while(!
a);
while(a!