智能仪器课程设计_第1页
智能仪器课程设计_第2页
智能仪器课程设计_第3页
智能仪器课程设计_第4页
智能仪器课程设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

智能仪器课程设计

班级:

姓名:

学号:

目录

实验目的:..................................................

二.实验规定:..................................................

三.硬件原理....................................................

1.单片机最小系统:.......................................

2.数码管.................................................

1.数码管功能使用:....................................

2.数码管阐明..........................................

3数码管原理图.........................................

3.LED灯...................................................

4.矩阵按键...............................................

1.矩阵键盘口勺功能使用.................................

2.矩阵键盘的J构造与工作原理............................

5.DA/AD转换PCF8591.........................................................................

6.I2C总线................................................

1.I2C总线基本构造:..................................

2.双向传播的J接口特性..................................

3.数据的传送.........................................

4.I2C总线的数据传送格式:.............................

5.总线竞争的仲裁:....................................

6.应用领域...........................................

四.软件原理....................................................

1.LED动态显示..........................................

1.显示原理............................................

2.键盘.....................................................

1.键盘扫描原理........................................

2.键盘扫描子程序.....................................

五.设计心得.....................................................

六.参照文献.....................................................

七.附录.........................................................

1.程序.....................................................

原理图.......................................................

PCB...............................................................................................................

波形发生器

一.实验目的:

1.掌握动态LED显示及键盘设计原理,对智能仪器中最基本的输入输出设备具有感性结识

2.纯熟掌握HC6800开发板的使用

3.通过•种相称对完整的程序编程,可以将单片机知仪和智能仪器的设计融会贯穿,同步

掌握对智能仪器的软硬件构成及硬件软化措施。

MyDesign.ddbPCB1.PCBPCB1.PCB3.Sch

2.数码管

1.数码管功能使用:

有2组四位动态数码管和1个一位静态数码管。当使用四位动态数码管时,用8位排线

将J12与单片机的I/O口脚相连,当使用一位静态数码管时,有两种连接方式:1.用8P排线

将JP3与单片机的I/O口脚相连,实现用单片机I/O脚直接控制数码管。2.用8P排线将JP2

与JP3相连,然后将JP12用短路冒所有短接,此时为单片机控制74HC595,,7HC595再控制

数码管的动态扫描。

2•数码管阐明

数码管事实上是由7个发光管构成的8字形构成的,加上小数点就是8个,动态扫描显

示接口是单片机中应用最为广泛的一种显示方式。其接口电路是把所有显示屏的8个笔

划a-h同名端连在一起,而每一种显示屏口勺公共极COM是各自独立地接受I/O口线控制。

CPU向各字段输出口送出字形码时,所有显示屏均接受到相似的字形码,但究竟是那个

显示屏亮,取决于COM端因此就可以自行决定何时显示哪一位了。所谓动态扫描就是

指我们采用分时的措施,轮流控制各个显示屏日勺COM端,使各个显示屏轮流点亮。每

位显示屏的J点亮时间是极为短暂日勺(约1ms),但由于人的视觉暂留现象及发光二极管

的余晖效应,尽管事实上各位显示屏并非同步点亮,但只要扫描的速度足够快,给人的

印象就是一组稳定的显示数据,不会有闪烁感。

3数码管原理图

3.LED灯

JPl为8路LED灯的接口,使用此功能时,将JP1与JP8-JP11中任何接口相连,即可实

现单片机控制8路LED。

原理图

JP\

4.矩阵按键

1.矩阵键盘的功能使用

JP4为矩阵键盘日勺接匚,plO-P13为行,pl4-pl6为列。使用8P排线把JP4与JP8-JP11

中任何接口相连,实现矩阵键盘的功能。

2.矩阵键盘的构造与工作原理

当键盘中按键数量较多时为了减少I/O口德占川,一般将按键排列成矩阵形式。在矩阵

键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一种按键加以连接.这样

一种端LJ就可以构成4*4个按键,比直接将端口线用于键盘多余了一倍,并且线数越多,

区别越明显,在需要的键数较多时,采用矩阵法来做键盘是合理的。矩阵式的键盘显然

比直接法复杂某些,辨认也要复杂某些。

原理图:

5.DA/AD转换PCF8591

Pcf8591使用12c与单片机通信,P2.1(SDA)串行数据线,P2.0(SCL)串行时钟线。ADO

和AD1是两路模拟输入,变化ADO和AD1位置的电位器,实现了两路模拟输入,在数

码管中可以看到数值变化。当PCF8591数模端口数据变化时,DA位置的LED亮度随之

变化。

PCF8591T简介:

PCF8591是Philips生产的8位辨别率D/A、A/D转换集成芯片,有4路模拟输入,1路模

拟输出,一种I2CBUS接口,3个给硬件编程的脚。通过I2C总线与解决器通信,其价格

低廉,接口简朴,转换控制容易等长处,在单片机应用系统中得到了广泛的J应用。

AN0-AIN3:模拟输出(A/D转换)

AOUT:模拟输出(D/A转换)

AO-A2:硬件设备地址

GND:电源负极地

VREF:参照电压输入

EXT:振荡器输入时,内部/外部的切换开关

OSC:振荡器输入/输出

SCL:I2CBUS时钟输入

SDA;I2CDUS数据输入输出

AGND:模拟地,模拟信号和基准电源的参照地

原理图:

6.I2C总线

12c总线是一种基于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL

(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址辨认每个器件:

不管是单片机,存储器,LCD驱动器还是键盘接口。

1.I2C总线基本构造:

采用12c总线原则H勺单片机IC器件,其内部构造不仅有12c接口电路,并且将内部各单

元电路电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片

选的连接。CPU不仅能通过指令将某个功能单元电路挂靠摘离总线,还可对该单元H勺工

作状况进行检测,从而实现对硬件系统的既简朴又灵活的扩展与控制。

I2C总线接口电路原理图:

2.双向传播的接口特性

老式的单片机串行接口日勺发送和接受一般都各用一条线,如MCS51系列於JTXD和RX»,

而12c总线则根据器件日勺功能通过软件程序使其可工作于发送接受方式。当某个器件向

总线上发送信息时,它就是发送器(也称主器件),而当其从总线上接受信息时,又成

为接受器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟,以开放送H勺器

件,此时,任何被寻址的器件均本人为是从器件。12c总线『、J控制完全由挂接在总线上

的主器件送出的J地址和数据决定。在在总线匕既没有中心机,也没有优先机。

总线上主和从(即发送和接受)的关系不是一成不变的,而是取决于此时数据传送的

方向。SDA和SCL均为双向输入输出线,通过上拉电阻接正电源。当总线空闲时,两根

线都是高电平。;连接总线的器件的输出级必须是集电极或漏极开路,以具有“线”与

功能。12c总线的|数据数据传送速率在原则工作方式卜为100kbit/S,在迅速方式卜,最

高传送速率可达400kbit/s.

在实际应用中,一般只有单片机可以发送CLK,因此,只有单片机可以作为主器件,

其他I2C器件均为从器件。多单片机系统一般很少应用。

I2C总线上的时钟信号在I2C总线上传送信息时的时间同步信号是由挂接在SCL

时钟器件的J逻辑与完毕的。SCI线上由高电平到低电平日勺跳变将影响这些器件,,旦某

个器件H勺SCI线跳变为低电平,使SCL」川勺所有器件进入低电平期。此时低电平周期短

的器件H勺时钟由低至高的跳变不能影响SCL线的状态,于是这些器件将进入高电平等待

的状态,当所有器件的时钟信号都跳变为高电平时,低电平期结束。SCL线被释放SCL线

被释放返回高电平,即所有H勺器件都同步开始它们的高电平期。其后,第一种结束高电

平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一种同步时钟。可见,时

钟低电平时间由时钟低电平期最长的器件拟定,而时钟高电平时间由时钟高电平期最

短的器件拟定。

3.数据的传送

在数据传送过程中,必须确认数据传送时开始和结束。在12c总线技术规范中,开

始和结束信号(也称启动和停止信号)的定义如图所示。

SDA1।II

一厂"\|/-------------\I广一厂

币1I―I।

「1-xj~|-—厂

]开值信81X-------1②X------']站来信♦力

当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;

当SCL线为高电平时,SDA线发生低电平到高电平II勺跳变为“结束”信号。开始和结束

信号都是由主器件产生。在开始信号后来,总线即被觉得处在忙状态;在结束信号后

来的一段时间内,总线被觉得是空

闲电

4J2C总线的数据传送格式:

在12c总线开始信号后,送出的第一种字节数据是用来选择器件地址的,其中前七位为地址

码,第八位为方向位,方向位为0表达发送,即主器件把信息写到所选择的从器件;方向位

为1表达主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件

送到总线上H勺地址进行比较,假如与主器件发送到总线上的地址一致,则该器件即为被主器

件寻址的器件,其接受信息还是发送信息则由第八位拟定。

在12c总线上每次传送的数据字节数不限,但每一种字节必须为8位,并且每个传送

的字节背面必须跟一种认可位,也叫应答位。

数据的传送过程:

鼠!/*”件|常:中学

"yzxDG二joojnooc二二tn4r

■lACKUX''

•0乙中”制・sa㈱Mt

每次都是先传最高位一般从器件在接受到每个字节后都会做出响应,即释放SCL线返网

高电平,准备接受下一种数据字节,主器件可继续传送。假如从器件正在解决一种实时

事件而不能接受数据时,(例如正在解决•种内部中断,在这个中断解决完之前就不能

接受12c总线上U勺数据字节)可以使时钟SCI线保持低电平,从器件必须使SDA保持高

电平,此时主器件产生1个结束信号,使传送异常垢束,迫使主器件处在等待状态。当

从器件解决完毕时,释放SCL线,主器件继续传送。

当主器件发送完一种字节日勺数据时,接着发出相应于SCL线上的一神时钟(ACK)

认可位,在此时钟内主器件释放SDA线一种字节传送结束,而从器件日勺响应信号将SDA

线拉成低调平,使SDA在该时钟U勺高电平期间为稳定II勺低电平。从器件的响应信号结束

后,SDA线返回高电平,进入下一种传送周期。

5.总线竞争的仲裁:

总线上也许挂接有多种器件,有时会发生两个或多种主器件想同步占用总线的状况,例如:

多单片机系统中,也许在某一时刻有两个单片机要同步向总线发送数据,这种状况叫总线竞

争。12c总线具有多主控能力,可对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是:

当多种主器件同步想占用总线时,假如某个主器件发送高下阿平,而另一种主器件发送低电

平,则发送电平与此时SDA总线电平不符合口勺那个器件将自动关闭其输出级。总线竞争口勺

仲裁是在两个层次上进行的。一方面是地址位H勺比较,从而保证了竞争仲裁H勺可靠性。由于

运用12c总线上的信息进行仲裁,因此不会导致信息的丢失。

6.应用领域

12c总线接口器件目前在视频解决,移动通信,等领域采用12c总线接口器件已经比较普遍。

此外,通用的H2C总线接口器件,如带I2C总线的单片机,RAM,ROM,A/D,D/A,LCD

驱动器等器件,也越来越多的应用于计算机及自动控制系统中。

四.软件原理

1.LED动态显示

1.显示原理

LED的静态显示虽然有编程容易,管理简朴等长处,但静态显示所要占用的IO口资源诸

多,因此在显示H勺LED较多的)状况卜,一般采用动态显示方式。

数码管事实上是由7个发光管构成U勺8字形构成U勺,加上小数点就是8个,动态扫描显示接

口是单片机中应用最为广泛的一种显示方式。其接口电路是把所有显示屏的8个笔划a-h同

名端连在一起,而每一种显示屏的公共极8M是各自犯立地接受I/O口线控制。CPU向各

字段输出口送由字形码时,所TT显示屏均接受到相似的字形码,但究竟是那个显示屏亮,取

决于COM端因此就可以自行决定何时显示哪一位了。所谓动态扫描就是指我们采用分时的

措施,轮流控制各个显示屏的COM端,使各个显示屏轮流点亮。每位显示屏的点亮时间是

极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管日勺余晖效应,尽管事实上各

位显示屏并非同步点亮,但只要扫描口勺速度足够快,给人的印象就是一组稳定的显示数据,

不会有闪烁感

显示子程序:

#include<reg51.h>

#include<intrins.h>

sbitLS138A=P2A2;〃定义138译码器区J输入A脚由P2.2控制

sbitLS138B=P2A3;〃定义138译码器的输入脚B由P2.3控制

sbitLS138C=P2A4;〃定义138译码器的J输入脚C由P2.4控制

voiddelay(unsignedinti);〃函数声名

charDelayCNT;

〃此表为LED的字模,共阴数码管0-9-

unsignedcharcodeDisp_Tab[]=

{Ox3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

main()

unsignedinti,LedNumVal=l;

unsignedintLedOut[10];

DelayCNT=O;

while(l)〃进入循环状态

if(++DelayCNT>=50)

(

DelayCNT=O;〃延时计数每扫描一次加一次

++LedNumVal;〃每隔50个扫描周期加一次

)

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[l]=Disp_Tab[LedNumVal%1000/100]|0x80;

LedOut[2]=Disp_Tab[LedNumVal%100/10];

LedOut[3]=Disp_Tab[LedNumVal%10];

LedOut[4]=Disp_Tab[LedNumVal%10000/1090];〃千位

LedOut[S]=Disp_Tab[LedNumVal%1000/100]|0x80;〃百位带小数点

LedOut[6]=Disp_Tab[LedNumVal%100/10);〃十位

LedOut[7]=Disp_Tab[LedNumVal%10];//个位

for(i=0;i<9;i++)〃实现8位动态扫描循环

{P0=LedOut[i];〃将字模送到P0LJ显示

switch(i)

case0:LS138A=0;LS138B=0;LS138C=0;break;

case1:LS138A=1;LS138B=0;LS138C=0;break;

case2:LS138A=0;LS138B=1;LS138C=0;break;

case3:LS138A=1;LS138B=1;LS138C=0;break;

case4:LS138A=0;LS138B=0;LS138C=1;break;

case5:LS138A=1;LS138B=0;LS138C=1;break;

case6:LS138A=0;LS138B=1;LS138C=1;break;

case7:LS138A=1;LS138B=1;LS138C=1;break;

}

delay(150);

)

)

)

voiddelay(unsignedinti)

(

charj;

for(i;i>0;i--)

for(j=200;j>0;j-);

)

2.键盘

1.键盘扫描原理

在键盘中按键数量较多时,为了减少I/O口日勺占用,一般将按键排列成矩底形式。在矩阵式

键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一种按键加以连接。这样,一

种端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多余了一倍,并且线数越多,

区别越明显,例如再多加一条线就可以构成20键的J键盘,而直接用端II线则只能多余一键。

由此可见,在需要日勺键数比较多时,采用矩阵法来做键盘是合理的。

矩阵式构造U勺键盘显然比直接法要复杂某屿,辨认也要复杂某些,列线通过电阻技正电

源,并将行线所接R勺单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,

当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有

键按下,则输入线就会被拉低,这样,通过读入输入线II勺状态就可得知与否有键按下了。

2.键盘扫描子程序

#include<reg51.h>

#include<intrins.h>

ttdefineucharunsignedchar

ttdefineuintunsignedint

uchardis_buf;〃显不缓存

uchartemp;

ucharkey;〃键顺序吗

voiddelayO(ucharx);//x*0.14MS

^definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};

unsignedcharcodeLED7Code[]

{〜0x3F,〜0x06,〜0x5B,〜0x4F,〜0x66,〜0x6D,〜0x7D,〜0x07,〜0x7F,〜0x6F,〜0x77,〜0x7C,〜0x39,〜0x5E,〜Ox

79,〜0x71};

voiddelay(ucharx)

{ucharj;

while((x-)!=0)

{for(j=0;j<125;j++)

{;}

)

)

voidkeyscan(void)

{temp=0;

Pl=OxFO;〃高四位输入行为高电平列为低电平

delay(l);

temp=Pl;〃读P1口

temp=temp&0xF0;〃屏蔽低四位

temp=~((temp»4)|OxFO);

if(temp==l)//pl.4被拉低

key=O;

elseif(temp==2)//pl.5被拉低

key=l;

elseif(temp==4)//pl.6被拉低

key=2;

elseif(temp==8)//pl.7被拉低

key=3;

else

key=16;

Pl=OxOF;〃低四位输入列为高电平行为低电平

delay(l);

temp=Pl;〃读Pl口

temp=temp&OxOF;

temp=~(temp|OxFO);

if(temp==2)//pl.l被拉低

key=key+O;

elseif(temp==4)//pl.2被拉低

key=key+4;

elseif(temp==8)//pl.3被拉低

key=key+8;

else

key=16;

dis_buf=key;〃键值入显示缓存

dis_buf=dis_buf&OxOf;

)

voidkeydown(void)

(

Pl=OxFO;

if(pi!=oxro)〃判断按键与否按下假如按钮按下会拉低PI其中日勺一-种端口

(

keyscan();〃调用按键扫描程序

)

)

main()

(

PO=OxFF;〃置P0口

Pl=OxFF;〃置P1口

delay(lO);〃延时

while(l)

(

keydown();〃调用按键判断检测程序

P0=LED7Code[dis_buf%16]&0x7f;〃LED7Ox7f为小数点共阴和共阳此处也是小

同样;%16表达输出16进制

)

)

五.设计心得

通过这次课程设计,加深了对知识日勺理解,也非常日勺清楚的结识了这门课程的重

要性,也意识到了自己在程序设计方面日勺单薄性。但愿在后来的学习和工作中能

进一部日勺加强自己专业素质和实践动手能力,并在单片机程序设计语言方面要实

现从汇编语言到C语言的跳转。

六.参照文献

1.赵新民,王祁智能仪器设计基本。哈尔滨工业大学出版社

七.附录

1.程序

^include<reg51.h>

//include<intrins.h>

#define_Nop()_nop_()/*定义空指令*/

ttdefineucharunsignedchar

#defineuintunsignedint

ucharcodesaw_tab[]={〃每隔数字8,采用一次

0xc0,0xbc/0xb8/0xb4/0xb0/0xac,0xa8/0xa4,0x30,0x90,0x98,0x94,

0x90,0x8^0x88,0x84,6x80,0x7^0x78,0x74,0x70,0x6c,0x68,0x64,0x60,0x5c,0x58,0x54,0x50,

0x4c,0x48,0x44,0x40,0x3c,0x38,0x34,0x30,0x2c,0x28,0x24,0x20,Oxlc,0x18,

0x14,0x10,0x06,0x08,0x04,0x00};

ucharcodemaichong_tab卜{255,255,255,255,255,2550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,000,0,0,0,0,0,000,0,0,0,0,000,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,000,0,0,0,0,000,0,0,0,000,0,0,0,0,0,0,000,0,0,0,0,0,0,0,000,0,0,0,0,0,0,0,

0,0,0,000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,000,0,0,0,0,0,0,0,0,0,0,0,0,};

uchardis_buf;〃显示缓存

uchartemp;

ucharkey,flag=O;〃键顺序吗

voiddelayO(ucharx);//x*0.14MS

ttdefinedelayNOP();{_nop_();_nop_();_nop_();_nop_();};

sbitLS138A=P2A2;〃定义138译码器日勺输入A脚由P2.2控制

sbitLS138B=P2A3;〃定义138译码器U勺输入脚B由P2.3控制

sbitLS138C=P2A4;〃定义138译码器的I输入脚C由P2.4控制

voiddelay9(unsignedinti);〃函数声名

charDelayCNT;

〃此表为LED的字模,共阴数码管0-9-

unsignedcharcodeDisp_Tsb[]={Ox3f,0x06,0x5b,0x4f/0x66/0x6d/0x7d,0x07,0x7f,0x6f,0x40};

unsignedcharcodeDisp_Tsbl[]={0x76,0x79,0x38,0x38,Ox3f};

bitack;/*应答标志位*/

sbitSCL=P2A1;//I2C时钟

sbitSDA=P2A0;//I2C数据

voidStart_l2c()

SDA=1;/*发送起始条件H勺数据信号*/

,Nop();

SCL=1;

_Nop();/*起始条件建立时间不小于4.7us,延时*/

_Nop();

_Nop();

_Nop();

_Nop();

SDA=0;/*发送起始信号*/

_Nop();/*起始条件锁定期间不小于4us*/

_Nop();

_Nop();

_Nop();

_Nop();

SCL=O;/*钳住12c总线,准备发送或接受数据*/

_Nop();

_Nop();

)

voidStop_l2c()

SDA=0;/*发送结束条件的数据信号*/

_Nop();/*发送结束条件的)时钟信号*/

SCL=1;/*结束条件建立时间不小于4Ms*/

,Nop();

_Nop();

_Nop();

_Nop();

,Nop();

SDA=1;/*发送12c总线结束信号*/

_Nop();

,Nop();

,Nop();

_Nop();

)

voidSendByte(unsignedcharc)

(

unsignedcharBitCnt;

for(BitCnt=0;BitCnt<8;BitCnt++)/*要传送的数据长度为8位*/

(

if((c«BitCnt)&0x80)SDA=l;/*判断发送位*/

elseSDA=0;

_Nop();

SCL=1;/*置时钟线为高,告知被控器开始接受数据位*/

_Nop();

_Nop();/*保证时钟高电平周期不小于4MS*/

,Nop();

_Nop();

_Nop();

SCL=O;

)

_Nop();

_Nop();

SDA=1;/*8位发送完后释放数据线,准备接受应答位*/

_Nop();

_Nop();

SCL=1;

,Nop();

_Nop();

_Nop();

if(SDA==l)ack=O;

elseack=l;/*判断与否接受到应答信号*/

SCL=O;

_Nop();

_Nop();

)

unsignedcharRcvByte()

unsignedcharretc;

unsignedcharBitCnt;

retc=O;

SDA=1;/*置数据线为输入方式*/

for(BitCnt=0;BitCnt<8;BitCnt++)

(

_Nop();

SCL=O;/*置时钟线为低,准备接受数据位*/

_Nop();

_Nop();/*时钟低电平周期不小于4.7Us*/

,Nop();

_Nop();

_Nop();

SCL=1;/*置时钟线为高使数据线上数据有效*/

_Nop();

_Nop();

retc=retc«l;

if(SDA==l)retc=retc+l;/*读数据位,接受的数据位放入retc中*/

_Nop();

_Nop();

)

SCL=O;

,Nop();

_Nop();

return(retc);

}

voidAck_l2c(bita)

if(a==O)SDA=O;/*在此发出应答或非应答信号*/

elseSDA=1;

_Nop();

_Nop();

,Nop();

SCL=1;

_Nop();

_Nop();/*时钟低电平周期不小于4s*/

,Nop();

_Nop();

_Nop();

SCL=O;/*清时钟线,钳住12c总线以便继续接受*/

_Nop();

_Nop();

voiddelay9(unsignedinti)

charj;

for(i;i>0;i—)

for(j=200;j>0;j-);

bitDACconversionfunsignedcharsla,unsignedcharc,unsignedcharVai)

Start_l2c();〃启动总线

SendByte(sla);〃发送器件地址

if(ack==0)return(0);

SendByte(c);〃发送控制字节

if(ack==0)return(0);

SendByte(Val);〃发送DAC的数值

if(ack==0)return(0);

Stop_l2c();〃结束总线

return(l);

)

voiddelay(uintx)

{ucharj;

while((x-)!=0)

{for(j=0;j<125;j++)

{;}

)

)

voidkeyscan(void)

{temp=0;

Pl=OxFO;〃高四位输入行为高电平列为低电平

delay(l);

temp=Pl;〃读Pl口

temp=temp&0xF0;〃屏蔽低四位

temp=~((temp»4)|OxFO);

if(temp==l)//P14被拉低

key=O;

elseif(temp==2)//pl.5被拉低

key=l;

elseif(temp==4)//pl.6被拉低

key=2;

elseif(temp==8)//pl.7被拉低

key=3;

else

key=16;

Pl=OxOF;〃低四位输入列为高电平行为低电平

delay(l);

temp=Pl;〃读Pl口

temp=temp&OxOF;

temp=~(temp|OxFO);

if(temp==2)//pl.l被拉低

key=key+0;

elseif(temp==4)//pl.2被拉低

key=key+4;

elseif(temp==8)//pl.3被拉低

key=key+8;

else

key=16;

dis_buf=key;〃键值入显示缓存

dis_buf=dis_buf&OxOf;

)

voidkeydown(void)

(

Pl=OxFO;

if(Pl!=OxFO)〃判断按键与否按下假如按钮按下会拉低Pl其中H勺一种端口

keyscanf);〃调用按键扫描程序

)

)

voiddeldy5(uribignedirillime)

(

for(time;time>0;time-);

)

voidbmain()

{uinth=50;

PO=OxFF;〃置PO口

Pl=OxFF;〃置Pl口

delay(lO);〃延时

while(h--)

(

unsignedinti;

unsignedintLed0ut[10];

LedOut[0]=Disp_Tab[key%10000/1000];

LedOut[l]=Disp_Tab[key%1000/100]|0x80;

LedOut[2]=Disp_Tab[key%100/10];

LedOut[3]=Disp_Tab(key%10];

LedOut[4]=Disp_Tab[key%10000/1000];〃千位

LedOut[5]=Disp_Tab[key%1000/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论