>
一.理论基础
1. 按键去抖
无论是按键还是键盘,大部分是利用机械触点的合,断作用。机械触点在闭合及断开由于弹性作用的影响,均存在抖动过程,从而使电压信号也出现抖动。抖动的时间长短于开关的机械特性有关,一般为5~10ms. 去抖动在硬件上可采用RS触发器或者利用用单稳态电路构成去抖电路;在软件上在采用软件延时10ms左右而去除影响。 2. 数码管LED
数码管分共阳极和共阴极两种,如图1-1所示
接高电平 公共阳极
高电平点亮
h g f e d c b a
低电平点亮
接地
图1-1 共阳极和共阴极数码管
单片机系统扩展LED数码管时多用共阳LED,共阳数码管每个段笔画是用低电平 “0”点亮的,要求驱动功率很小;而共阴数码管段笔画是用高电平 “1”点亮的,要求驱动功率较大。
数码管在使用时通常每个段笔画要串一个数百欧姆的降压电阻。 3. LED数码管的译码
数码管的译码分硬件译码和软件译码两种 (1)硬件译码
硬件译码采用专用的译码/驱动器件,驱动功率较大,软件编程简单,直接传送要显示的数据即可,但是字型固定(比如:只有七段,只可译数字)。74LS48/CD4511是“BCD码→七段共阴译码/驱动”芯片,74LS47是“BCD码→七段共阳译码/驱动”芯片。
(2)软件译码
软件译码的驱动功率较小,软件编程较复杂,显示数据需要对应段代码编码值才能显示,段代码编码表如表1所示,汇编语言编写时,采用查表程序完成,应用MOVC A,@A+DPTR指令,并建立数据表:
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
C语言可以建立数组B[]=[0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F],显示相对应数组元素来实现。
S1增数功能,增到9,再按S1变为0;S2减数功能,减到0,再按S2变为9.
三.硬件设计
四.软件设计
1.汇编语言编程 org 000h mov p0,#00h Start: mov a,#00h Setb p2.0 Setb p2.1 Loop:
Jnb p2.0, incr //***S1加键按下 Jnb p2.1,decr //***S2减键按下 Jmp loop
;************加键************ Incr: acall delay
jnb p2.0,incr //***按键去抖动 Inc a
Cjne a,#10,loop1 //****A=10? loop1: jc loop11
mov p0,a
Mov a,#00h Loop11: mov p0,a acall delay Jmp loop
;************减键************ decr: acall delay
jnb p2.1,decr //***按键去抖动 cjne a,#00h, loop3 //****A!=0? mov p0,a //****A=0 mov a,#9h sjmp loop32
loop3: jnc loop33 loop33: dec a
loop32: mov p0,a acall delay
Jmp loop
//************延时去抖**************// DELAY: MOV R3, #255 ;延时子程序 DEL2: MOV R4, #255 DEL1:
DJNZ R4 , DEL1 DJNZ R3, DEL2 RET end
2. C语言编程 #include #include #include
#define uchar unsigned char #define uint unsigned int uint jishu;
sbit jia= P2^0; //*加键 sbit jian= P2^1; //*减键
void delayms(uint ms) //*毫秒延时子函数 {
uint i,j;
for (j=0;j
for(i=0;i
void start(void) //*初始化子函数 {
P0=0X00;
jia=1; jian=1; }
void jiafa(void) //*加法 {
delayms(140); if (jia==0) {
jishu++; if(jishu
P0=jishu; } else {
jishu=0; P0=jishu; } } }
void jianfa(void) //*加法 {
delayms(140); if (jian==0) {
if(jishu>0) {
jishu--; P0=jishu; } else {
P0=jishu; jishu=9; P0=jishu; } } }
void main() {
start(); //*初始化子函数 while(1) {
if(jia==0) {
jiafa();//*加法子函数 } if(jian==0) {
jianfa(); //*减法子函数 } } }
《实验10 DA转换实验》
1. 理论基础
1. DA转换原理
3.软件设计
output equ p2;
count1 equ 36h; onoff equ 00h;
org 0000h; ajmp main;
org 0030h;
main: mov count1,#00h; jb P3.0,tri;
saw: inc count1;
lcall daout; 调DA输出子程序
mov a,count1;
cjne a,#0ffh,sawback; mov count1,#00h; sawback: sjmp saw; tri: clr onoff;
trian: jb onoff,down; inc count1;
lcall daout; 调DA输出子程序
mov a,count1; cjne a,#0ffh,back; setb onoff; sjmp back; down: dec count1;
;mov count,#0ah; lcall daout;
mov a,count1; cjne a,#00h,back; clr back: sjmp
daout: mov nop;
mov nop;
mov nop;
mov ret;
end;
onoff; trian; p1,#0ffh; output,count1; p1,#0fch; p1,#0f0h;