1、 由于键盘的,键盘在按下和松开的过程中存在抖动过程,为了消除干扰,必须采取措施。对脉冲进行整形,得到标准脉冲。当判定按键按下时,用软件,等待键稳后重新再判一次,以躲过触点抖动期。应用最多,特点是一个按键对应一根I/O口线,各键相互独立,采用电压跳变检测方式来判断。if(P1&0 xff)!=0 xff)/判断是否有键按下 Delay5ms(4);/调20ms延时消抖子程序,if(P1&0 xff)!=0 xff)/不全为高有键按下 switch(P1&0 xff)/判断何键按下,获取键值 case 0 xfe:return 1;case 0 xfd:return 2;case 0 xfb:re
2、turn 3;case 0 xf7:return 4;default:return null;return null;行列式键盘也称为矩阵式键盘,通常应用于按键数目较多的场合,由行线和列线组成。首先判断是否有键按下,有键按下后进行、列扫描,找出按下键所在的行和列,从而获取键值。p 所有输出口输出“0”,读入输入口状态;p 低4位如果全为“1”,无键按下,否则至少有一个键按下,开始行列扫描;p 令第1列输出“0”,其他列输出“1”,记录列值(N),读入输入口状态,p 无键按下,令下一列输出“0”;有键按下,进行行扫描,记录行号(M)。先让行线作为输出口,列线作为输入口。令输出口输出“0”,读入输
3、入口状态;之后线路反转,令列线作为输出口,行线作为输入口,输出口输出“0”,再读入输入口状态,通过两次读入的数据就能识别出何健按下。1111000000001111功能:p具有4路抢答功能;p具有抢答开始和屏蔽控制功能;p抢答成功后能屏蔽其他人的抢答的功能。系统采用中断方式实现,将I/O口状态连接一个4输入与门,与门的输出连接到单片机的外部中断1引脚。在中断服务子程序中屏蔽外部1中断,保证有选手抢答成功后屏蔽其他人的抢答。XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5
4、/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U18051R110kR210kR310kR410kR5100RR6100RR7100RR8100RR91K复位复位1号号2号号3号号4号号&23451 介
5、绍LED数码管和较为常用的LCD显示器和单片机的接口设计。(2)段码计算 涉及(共阳、阴极)显示字符D7D6D5D4D3D2D1D0段码dpgfedcba“1”11111001F9H每位LED的8个段都配有独立的I/O口线,公共端直接接地或者接VCC。每一位显示输出后能够保持显示不变,直至重新送入新的数据。当显示位数较多时,占用的I/O口较多。把所有数码管的并联在一起,每个数码管的进行控制。对各显示器进行,显示器件工作,每次只允许一个器件显示。使用硬件少占用I/O口少。占用机时长,只要不执行显示程序,就立刻停止显示。3、利用、利用74LS164实现实现2位静态显示电路位静态显示电路 cf1RX
6、D1-a1-b1-c1-d1-e1-f1-g2-a2-b2-c2-d2-e2-f2-gcf1cf2+5V+5VTXDTXDcom1-b1-c1-d1-e1-f1-g2-a2-b2-c2-d2-e2-f2-gcom1-aRXDTXD+5VcomXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/I
7、NT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U18051SRG8RC1/-&1D1324561081112913U274LS164SRG8RC1/-&1D1324561081112913U374LS164D11N4001D21N4001D31N4001#include reg51.h#define uchar unsigned char#define uint unsigned i
8、ntuchar ddseg12=0 x03,0 x9F,0 x25,0 x0D,0 x99,0 x49,0 x41,0 x1F,0 x01,0 x09,0 x30;/定义段码void disp(uchar*p1,uchar k)/显示子程序,显示位数为k,数组首地址为*p1 uchar i,j;for(i=0;i&1D1324561081112913U274LS164SRG8RC1/-&1D1324561081112913U374LS164D11N4001D21N4001D31N40014、利用利用MAX7219实现实现4位动态显示电路位动态显示电路(1)MAX7219引脚功能 串行数据输入端
9、,数据传输在时钟上升沿有效。串行数据输出端,用于多片MAX7219级连扩展使用。装载数据输入端,上升沿锁存数据。串行时钟输入端。8位LED位选线,从共阴极数码管中吸入电流。7段驱动和小数点驱动端,用于传送段码数据。通过一个10k电阻和Vcc相连,可以设置流过每个段的电流大小。芯片工作电源输入端。(2)控制寄存器 p译码控制寄存器(地址:9H)译码方式寄存器数据命令代码D7D6D5D4D3D2D1D00-7位均不译码0000000000H位0不译码,位1-7采用B译码0000000101H0-3位B译码,4-7位不译码000011110FH0-7位均采用B译码11111111FFHp扫描界限寄存
10、器(BH)扫描个数寄存器数据命令代码D7D6D5D4D3D2D1D0只驱动数码管00000H驱动数码管0、10011H驱动数码管0、1、20102H驱动所有数码管1117Hp亮度控制寄存器(AH)共有16级亮度可选择,用于设置LED数码管的显示亮度,数据值分别为:0HFH。p关断模式寄存器(CH)MAX7219共有两种模式选择,一是关断状态,只需要把最低位D0设置为0即可;另一是正常工作状态,把最低位D0设置成1即可。p显示测试寄存器(FH)用于判断MAX7219处于测试状态还是正常工作状态,如果为测试状态,最低位D0=1,所有数码管全亮;如果是正常工作状态,最低位数据D0=0。abcdefg
11、dpcom1com2com3com4abcdefgcom1abcdefgcom2abcdefgcom3abcdefgcom4XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1
12、528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U18051A14B16C20D23E21F15G17DP22DIG02DIG111DIG26DIG37DIG43DIG510DIG65DIG78DIN1LOAD12CLK13ISET18DOUT24U2MAX7219上电延时30mS功能设置延时39uS显示设置延时39uS清屏延时1.53mS模式设置 TXDRXDcf1RXDcom1-a1-b1-c1-d1-e1-f1-g1-a1-b1-c1-d1-e1-f1-g2-a2-b2-c2-d2-e2-f2-
13、gcom2-a2-b2-c2-d2-e2-f2-gcf1cf2comcomTXDTXDINT0GNDGNDINT0comcomXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/R
14、XD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U180C51SRG8RC1/-&1D1324561081112913U674LS164SRG8RC1/-&1D1324561081112913U774LS164+5VR25.1kD11N4007D21N4007D31N4007D41N4007NY ORG 0000HAJMP STARTORG 0003HAJMP WB0ORG 000BHAJMP DS0ORG 0030HJIA:MOV A,50H ADD A,#01H DA A MOV 50H,A R
15、ETCHULI:MOV A,50H ANL A,#0FH MOV 51H,A MOV A,50H SWAP A ANL A,#0FH MOV 52H,A RET NEXT:MOV A,R0MOV DPTR,#DDSEGMOVC A,A+DPTRINC R0DJNZ R7,NEXTRETDDSEG:DB 03H,9FH,25H,DB 0DH,99H,49H,DB 41H,1FH,01H,09H END选型时考虑的参数:p输出形式 电压输出形式,电流输出形式。p接口方式 并行接口,串行接口,如 I2C、SPI。p分辨率 衡量D/A转换器对输入量的描述,反映D/A转换器对信号的,其与输入数字量的有关
16、,通常用最低有效位表示。D/A转换器内部主要包含:等,fbDDDDfbiORIIIIRIV*)*2*2*2*2(*001122333、利用利用DAC0832实现锯齿波信号发生器实现锯齿波信号发生器 VREF8GND3VCC20CS1WR12DI34DI25DI16DI07RFB9GND10IOUT111IOUT212DI713DI614DI515DI416XFER17WR218ILE(BY1/BY2)19D3D1D4D6+5VP27+5VVOUTRFBD2D0D7D5D0D1D2D3D4D5D6D7P27VREF8GND3VCC20CS1WR12DI34DI25DI16DI07RFB9GND1
17、0IOUT111IOUT212DI713DI614DI515DI416XFER17WR218ILE(BY1/BY2)19U1DAC0832XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78
18、P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115U280C5132184U3:ALM358#include reg51.h#include#define uchar unsigned char#define uint unsigned intmain()uchar x,j;x=0X00;while(1)DACADDR=x;for(j=0;j&1D1324561081112913U674LS164SRG8RC1/-&1D1324561081112913U774LS164+5VSRG8RC1
19、/-&1D1324561081112913U874LS164UIN0#include reg51.h#include reg51.h#define uchar#define uchar unsigned char unsigned charsbitsbit led1=P10;led1=P10;uchar ad_datauchar ad_data,disstr3;disstr3;ucharuchar ddseg12=0 x03,0 x9F,0 x25,0 x0D,0 x99,0 x49,0 x41,0 x1F,0 x01,ddseg12=0 x03,0 x9F,0 x25,0 x0D,0 x99
20、,0 x49,0 x41,0 x1F,0 x01,0 x09;/0 x09;/数字数字0-90-9的段码的段码void disp(ucharvoid disp(uchar *p1,uchar k)p1,uchar k)/显示子程序显示子程序 uchar i,j uchar i,j;for(i=0;ik;i for(i=0;ik;i+)+)j=j=*p1;p1;SBUF=ddsegj SBUF=ddsegj;p1+;p1+;while(!TI)while(!TI);TI=0;TI=0;void int0()interrupt 0/外部中断0服务子程序 uint xy;disstr2=ad_data/100;/处理A/D转换结果,将十六进制转换成BCD码 disstr1=ad_data%100/10;disstr0=ad_data%100%10;disp(disstr,3);/转换结果进行数字显示 led1=!led1;/状态指示灯 for(xy=0;xy5000;xy+)/延时保证显示效果 ;ADCADDR=ad_data;/启动新一轮A/D转换