个人收集整理仅供参考学习
13.动态数码显示技术
1.实验任务
如图4.13.1所示,P0端口接动态数码管地字形码笔段,P2端口接动态数码 管地数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字 样;当开关接低电平时,显示“HELLO”字样.b5E2RGbCAP
2.电路原理图
图4.13.1
3.系统板上硬件连线
(1.把“单片机系统”区域中地P0.0/AD0-P0.7/AD7用8 芯排线连接到“动 态数码显示”区域中地a-h端口上; p1EanqFDPw 1 /49
个人收集整理仅供参考学习
(2.把“单片机系统”区域中地P2.0/A8-P2.7/A15用8芯排线连接到“动态 数码显示”区域中地S1-S8端口上;DXDiTa9E3d
(3.把“单片机系统”区域中地P1.7端口用导线连接到“式键盘”区域 中地SP1端口上;
4.程序设计内容
(1.动态扫描方法
利用人眼动态接口采用各数码管循环轮流显示地方法,
当循环显示频率较高时,地暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码地输出(字形选择),另一接口完成各数码管地轮流点亮(数位选择).RTCrpUDGiT
(2.在进行数码显示地时候,要对显示单元开辟8个显示缓冲区,每个显示缓 冲区装有显示地不同数据即可.
(3.对于显示地字形码数据我们采用查表方法来完成.
5. 程序框图
图4.13.2 |
|
2/ 49
个人收集整理仅供参考学习
6. 汇编源程序
ORG 00H
START: JB P1.7,DIR1
MOV DPTR,#TABLE1
SJMP DIR
DIR1: MOV DPTR,#TABLE2
DIR: MOV R0,#00H
MOV R1,#01H
NEXT: MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
MOVA,R1
MOV P2,A
LCALL DAY
INC R0
RL A
MOVR1,A
CJNE R1,#0DFH,NEXT
SJMP START
DAY: MOV R6,#4
D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1
END RET
7.C语言源程序
#include<ATX51.H>
unsignedchar code table1[]={0x06,0x5b,0x4f,0x66,0x6d}; unsigned char codetable2[]={0x78,0x79,0x38,0x38,0x3f}; unsigned char i;
unsignedchar a,b;
unsignedchar temp;
voidmain(void)
{
while(1)
{
temp=0xfe;
for(i=0;i<5;i++)
{
if(P1_7==1)
3 / 49
个人收集整理仅供参考学习
{
P0=table1[i];
}
else
{
P0=table2[i];
}
P2=temp;
a=temp<<(i+1);
b=temp>>(7-i);
temp=a|b;
for(a=4;a>0;a--)
for(b=248;b>0;b--);
}
}
}5PCzVD7HxA
4/ 49
个人收集整理仅供参考学习
14.4×4矩阵式键盘识别技术
1.实验任务
如图4.14.2所示,用ATS51地并行口P1接4×4矩阵键盘,以P1.0-P1.3 作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键地“0-F”序 号.对应地按键地序号排列如图4.14.1所示jLBHrnAILg
图4.14.1
2.硬件电路原理图
图4.14.2 3.系统板上硬件连线 5 / 49
个人收集整理仅供参考学习
(1.把“单片机系统“区域中地P3.0-P3.7端口用8芯排线连接到“4X4行列 式键盘”区域中地C1-C4R1-R4端口上;xHAQX74J0X
(2.把“单片机系统”区域中地P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中地任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h.LDAYtRyKfE
4.程序设计内容
(1.4×4矩阵键盘识别处理
(2.每个按键有它地行值和列值,行值和列值地组合就是识别这个按键地编码.矩阵地行线和列线分别通过两并行接口和CPU通信.每个按键地状态同样需变成数字量“0”和“1”,开关地一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现地.键盘处理程序地任务是:确定有无键按下,判断哪一个键按下,键地功能是什么;还要消除按键在闭合或断开时地抖动.两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键地功能.
Zzz6ZB2Ltk
5. 程序框图
6/ 49
个人收集整理仅供参考学习
图4.14.3
6.汇编源程序
KEYBUFEQU 30H
ORG00H
START:MOV KEYBUF,#2
WAIT:
MOVP3,#0FFH
CLRP3.4
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZ NOKEY1
LCALL DELY10MS
MOV A,P3 |
|
7 / 49
个人收集整理仅供参考学习
ANL A,#0FH
XRL A,#0FH
JZ NOKEY1
MOV A,P3
ANLA,#0FH
CJNE A,#0EH,NK1
MOV KEYBUF,#0
LJMP DK1
NK1:CJNE A,#0DH,NK2
MOV KEYBUF,#1
LJMP DK1
NK2: CJNEA,#0BH,NK3
MOV KEYBUF,#2
LJMP DK1
NK3: CJNEA,#07H,NK4
MOV KEYBUF,#3
LJMP DK1
NK4: NOP
DK1:
MOV A,KEYBUF
MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A
ANL A,#0FH XRL A,#0FH JNZ DK1A
NOKEY1:
MOV P3,#0FFH
CLRP3.5
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
LCALL DELY10MS
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY2
MOV A,P3
ANL A,#0FH
CJNE A,#0EH,NK5
MOV KEYBUF,#4
8 / 49
个人收集整理仅供参考学习
LJMPDK2
NK5:CJNE A,#0DH,NK6
MOVKEYBUF,#5
LJMPDK2
NK6:CJNE A,#0BH,NK7
MOVKEYBUF,#6
LJMPDK2
NK7:CJNE A,#07H,NK8
MOVKEYBUF,#7
LJMPDK2
NK8:NOP
DK2:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
DK2A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK2ANOKEY2: MOV P3,#0FFH
MOV A,P3 ANL A,#0FH XRL A,#0FH CLR P3.6
JZNOKEY3
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK3
NK9:CJNE A,#0DH,NK10
MOVKEYBUF,#9
LJMPDK3
NK10: CJNE A,#0BH,NK11 MOV KEYBUF,#10
LJMP DK3
9 / 49
个人收集整理仅供参考学习
NK11:CJNE A,#07H,NK12
MOVKEYBUF,#11
LJMPDK3
NK12:NOP
DK3:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
DK3A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK3A
NOKEY3:
MOV P3,#0FFH
CLR P3.7
MOV A,P3
ANLA,#0FH
XRL A,#0FH
JZ NOKEY4 LCALL DELY10MS MOV A,P3
XRL A,#0FH JZ NOKEY4 MOV A,P3 ANL A,#0FH
ANLA,#0FH
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4
NK13:CJNE A,#0DH,NK14
MOVKEYBUF,#13
LJMPDK4
NK14:CJNE A,#0BH,NK15
MOVKEYBUF,#14
LJMPDK4
NK15:CJNE A,#07H,NK16
MOVKEYBUF,#15
LJMPDK4
NK16:NOP
DK4:
MOV A,KEYBUF
MOV DPTR,#TABLE
10 / 49
个人收集整理仅供参考学习
MOVCA,@A+DPTR
MOVP0,A
DK4A: MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ DK4A
NOKEY4:
LJMP WAIT
DELY10MS:
MOV R6,#10
D1:MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
7.C 语言源程序
#include<ATX51.H>
unsigned char codetable[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
unsigned char i,j;
voidmain(void)
{
while(1)
{
P3=0xff;
P3_4=0;
temp=P3;
temp=temp& 0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
11 / 49
个人收集整理仅供参考学习
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=7;
break;
case 0x0d:
key=8;
break;
case 0x0b:
key=9;
break;
case0x07:
key=10;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key]; temp=temp & 0x0f; while(temp!=0x0f)
temp=P3;
} {
}
}
P3=0xff;
P3_5=0;
temp=P3;
temp=temp & 0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{temp=P3;
temp=temp & 0x0f;
12/ 49
个人收集整理仅供参考学习
switch(temp)
{
case 0x0e:
key=4;
break;
case0x0d:
key=5;
break;
case 0x0b:
key=6;
break;
case 0x07:
key=11;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
temp=temp & 0x0f;
while(temp!=0x0f)
{ temp=P3; temp=temp & 0x0f;
} } }
P3=0xff;
P3_6=0;
temp=P3;
temp=temp& 0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp& 0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp& 0x0f;
switch(temp)
{
case 0x0e:
13 / 49
个人收集整理仅供参考学习
key=1;
break;
case 0x0d:
key=2;
break;
case0x0b:
key=3;
break;
case 0x07:
key=12;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
} } }
P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp & 0x0f;
if (temp!=0x0f)
{
temp=P3;
temp=temp & 0x0f;
switch(temp)
{
case 0x0e:
key=0; break;
case 0x0d:
14/ 49
个人收集整理仅供参考学习
key=13;
break;
case 0x0b:
key=14;
break;
case 0x07:
key=15;
break;
}
temp=P3;
P1_0=~P1_0;
P0=table[key];
temp=temp & 0x0f;
while(temp!=0x0f)
{
temp=P3;
temp=temp &0x0f;
}
}
}
} } dvzfvkwMI1
15/ 49
个人收集整理仅供参考学习
15.定时计数器T0作定时应用技术(一)
1.实验任务
用ATS51单片机地定时/计数器T0产生一秒地定时时间,作为秒计数时间,当
一秒产生时,秒计数加1,秒计数到60时,自动从0开始.硬件电路如下图所示
rqyn14ZNXI
2.电路原理图
图4.15.1
3.系统板上硬件连线
(1.把“单片机系统”区域中地P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四
路静态数码显示模块”区域中地任一个a-h端口上;要求:P0.0/AD0对
应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h.EmxvxOtOco
(2.把“单片机系统”区域中地P2.0/A8-P2.7/A15端口用8芯排线连接到“四
路静态数码显示模块”区域中地任一个a-h端口上;要求:P2.0/A8对
应着a,P2.1/A9对应着b,……,P2.7/A15对应着h.SixE2yXPq5
4. 程序设计内容
16/ 49
个人收集整理仅供参考学习
ATS51单片机地内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式.只要通过设置特殊功能寄存器TMOD,即可完成.定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成地.6ewMyirQFL
现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要地1秒地定时,因此,我们必须通过软件来处理这个问题,假设我们取T0地最大定时为50ms,即要定时1秒需要经过20次地50ms地定时.对于这20次我们就可以采用软件地方法来统计了.kavU42VRUs
因此,我们设定TMOD=00000001B,即TMOD=01H
下面我们要给T0定时/计数器地TH0,TL0装入预置初值,通过下面地公式可以计算出
TH0=(216-50000)/256
TL0=(216-50000)MOD256
当T0在工作地时候,我们如何得知50ms地定时时间已到,这回我们通过检
y6v3ALoS
测TCON特殊功能寄存器中地TF0标志位,如果TF0=1表示定时时间已到.
17/ 49
个人收集整理仅供参考学习
SECOND EQU 30H
TCOUNT EQU 31H
ORG 00H
START:MOV SECOND,#00H
MOV TCOUNT,#00H
MOV TMOD,#01H
MOVTH0,#(65536-50000) / 256
MOV TL0,#(65536-50000) MOD 256
SETBTR0
DISP: MOV A,SECOND
MOV B,#10
DIV AB
MOVDPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A |
|
18/ 49
个人收集整理仅供参考学习
MOVP2,A
WAIT:JNB TF0,WAIT
CLRTF0
MOVTH0,#(65536-50000) / 256
MOVTL0,#(65536-50000) MOD 256
INCTCOUNT
MOVA,TCOUNT
CJNEA,#20,NEXT
MOVTCOUNT,#00H
INCSECOND
MOVA,SECOND
CJNEA,#60,NEX
MOVSECOND,#00H
NEX:LJMP DISP
NEXT:LJMP WAIT
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END
7.C语言源程序(查询法)
#include<ATX51.H>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,
void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
tcount=0;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
while(1)
{
if(TF0==1)
{
tcount++;
if(tcount==20)
{
19 / 49
个人收集整理仅供参考学习
tcount=0;
second++;
if(second==60)
{
second=0;
}
P0=dispcode[second/10];
P2=dispcode[second%10];
}
TF0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
}
}
1.汇编源程序(中断法)
SECOND EQU 30H
TCOUNTEQU 31H
ORG 00H
LJMP START
ORG 0BH LJMP INT0XSTART: MOV SECOND,#00H
MOV B,#10 DIV AB MOV DPTR,#TABLE MOV A,SECOND
MOVCA,@A+DPTR
MOVP0,A
MOVA,B
MOVCA,@A+DPTR
MOVP2,A
MOVTCOUNT,#00H
MOVTMOD,#01H
MOVTH0,#(65536-50000) / 256
MOVTL0,#(65536-50000) MOD 256
SETBTR0
SETBET0
SETBEA
SJMP$
INT0X:
MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256
INC TCOUNT
20 / 49
个人收集整理仅供参考学习
MOVA,TCOUNT
CJNEA,#20,NEXT
MOVTCOUNT,#00H
INCSECOND
MOVA,SECOND
CJNEA,#60,NEX
MOVSECOND,#00H
NEX:MOV A,SECOND
MOVB,#10
DIVAB
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
MOVA,B
MOVCA,@A+DPTR
MOVP2,A
NEXT:RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
2.C 语言源程序(中断法)#include<ATX51.H>
unsigned char second;
unsigned chartcount;
voidmain(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
(INT1和INT0为外部中断)ET0=1; 当ET0位为1且EA位也为1时,开放INT1.
EA=1;
tcount=0;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10]; while(1);
}
21 / 49
个人收集整理仅供参考学习
voidt0(void) interrupt 1 using 0
{
tcount++;
if(tcount==20)
{
tcount=0;
second++;
if(second==60)
{
second=0;
}
P0=dispcode[second/10];
P2=dispcode[second%10];
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}M2ub6vSTnP
22/ 49
个人收集整理仅供参考学习
16.定时计数器T0作定时应用技术(二)
1.实验任务
用ATS51地定时/计数器T0产生2秒钟地定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁地频率为0.2秒,也就是说,开始L1指示灯以0.2秒地速率闪烁,当2秒定时到来之后,L2开始以0.2秒地速率闪烁,如此循环下去.0.2秒地闪烁速率也由定时/计数器T0来完成.0YujCfmUCw
2.电路原理图
图4.16.1
3.系统板硬件连线
(1.把“单片机系统”区域中地P1.0-P1.3用导线连接到“八路发光二极管 指示模块”区域中地L1-L4上 eUts8ZQVRd 4.程序设计内容 23 / 49
个人收集整理仅供参考学习
(1.由于采用中断方式来完成,因此,对于中断源必须它地中断入口地址,对于定时/计数器T0来说,中断入口地址为000BH,因此在中断入口地方加入长跳转指令来执行中断服务程序.书写汇编源程序格式如下所示:
ORG00H
LJMPSTART
ORG0BH ;定时/计数器T0中断入口地址
LJMPINT_T0
START:NOP ;主程序开始
.
.
INT_T0:PUSH ACC ;定时/计数器T0中断服务程序PUSHPSW
.
.
POPPSW
POPACC
RETI ;中断服务程序返回
ENDsQsAEJkW5T
(2.定时2 秒,产生一中断,定时地40次数在中断服务程序中完成,同样0.2秒地采用16 位定时50ms,共定时40次才可达到2 秒,每50ms
ID=0 时,L1在闪烁,当ID=1时,L2 在闪烁;当ID=2时,L3 在
闪烁;当ID=3时,L4 在闪烁TIrRGchYzg
5.程序框图
T0中断服务程序框图
24/ 49
个人收集整理仅供参考学习
主程序框图
25/ 49
个人收集整理仅供参考学习
图4.16.2
6.汇编源程序
6.汇编源程序
TCOUNT2SEQU 30H
TCNT02SEQU 31H
ID EQU 32H |
|
26/ 49
个人收集整理仅供参考学习
LJMP INT_T0
START: MOV TCOUNT2S,#00H
MOV TCNT02S,#00H
MOV ID,#00H
MOV TMOD,#01H
MOV TH0,#(65536-50000) /256
MOV TL0,#(65536-50000) MOD 256
SETB TR0
SETBET0
SETB EA
SJMP $
INT_T0: MOV TH0,#(65536-50000) /256
MOV TL0,#(65536-50000) MOD 256
INC TCOUNT2S
MOVA,TCOUNT2S
CJNE A,#40,NEXT
MOV TCOUNT2S,#00H
INC ID
MOV A,ID
CJNE A,#04H,NEXT
MOV ID,#00H NEXT: INCTCNT02S MOV A,TCNT02S
MOV A,ID CJNE A,#00H,SID1 CPL P1.0
SJMP DONE
SID1: CJNEA,#01H,SID2
CPL P1.1
SJMP DONE
SID2: CJNEA,#02H,SID3
CPL P1.2
SJMP DONE
SID3: CJNEA,#03H,SID4
CPL P1.3
SID4: SJMP DONE
DONE: RETI
END
7. C 语言源程序
#include <ATX51.H>
unsigned char tcount2s;
27 / 49
个人收集整理仅供参考学习
unsignedchar tcount02s;
unsignedchar ID;
voidmain(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
void t0(void) interrupt 1 using 0
{
tcount2s++;
if(tcount2s==40)
{
tcount2s=0; ID++; if(ID==4)
ID=0; } } {
tcount02s++;
if(tcount02s==4)
{
tcount02s=0;
switch(ID)
{
case 0:
P1_0=~P1_0;
break;
case 1:
P1_1=~P1_1;
break;
case 2:
P1_2=~P1_2;
break; case 3:
P1_3=~P1_3;
28/ 49
个人收集整理仅供参考学习
break;
}
}
}7EqZcWLZNX
29/ 49
个人收集整理仅供参考学习
17.99秒马表设计
1.实验任务
(1.开始时,显示“00”,第1次按下SP1后就开始计时.
(2.第2次按SP1后,计时停止.
(3.第3次按SP1后,计时归零.lzq7IGf02E
2.电路原理图
图4.17.1
3.系统板上硬件连线
(1.把“单片机系统”区域中地P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四
路静态数码显示模块”区域中地任一个a-h端口上;要求:P0.0/AD0对
应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h.zvpgeqJ1hk
(2.把“单片机系统”区域中地P2.0/A8-P2.7/A15端口用8芯排线连接到“四
路静态数码显示模块”区域中地任一个a-h端口上;要求:P2.0/A8对
应着a,P2.1/A9对应着b,……,P2.7/A15对应着h. NrpoJac3v1
30/ 49
个人收集整理仅供参考学习
(3.把“单片机系统“区域中地P3.5/T1用导线连接到”式键盘“区域中 地SP1端口上;
4.程序框图
主程序框图
T0中断服务程序框图
31/ 49
个人收集整理仅供参考学习
图4.17.2
SEC EQU 32H
KEYCNT EQU 33H
SP1 BIT P3.5
ORG 00H
LJMPSTART
ORG 0BH
LJMP INT_T0
START: MOV KEYCNT,#00H
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOVDPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A |
|
32/ 49
个人收集整理仅供参考学习
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JBSP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOVTCNTA,#00H
MOV TCNTB,#00H
LJMP DKN
KN1: CJNEA,#02H,KN2
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKNMOV SEC,#00H MOV A,SEC
DIVAB
MOVC A,@A+DPTR MOV B,#10
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KEYCNT,#00H
DKN: JNB SP1,$
LJMPWT
DELY10MS:
MOV R6,#20
D1: MOV R7,#248
DJNZR7,$
DJNZ R6,D1
RET
INT_T0: INC TCNTA
MOV A,TCNTA
33/ 49
个人收集整理仅供参考学习
CJNE A,#100,NEXT
MOV TCNTA,#00H
INC TCNTB
MOVA,TCNTB
CJNE A,#4,NEXT
MOV TCNTB,#00H
INC SEC
MOVA,SEC
CJNE A,#100,DONE
MOV SEC,#00H
DONE: MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVCA,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVCA,@A+DPTR
MOV P2,A
NEXT: RETI TABLE: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
voidmain(void)
{
unsignedchar i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
34 / 49
个人收集整理仅供参考学习
while(1)
{
if(P3_5==0)
{
for(i=20;i>0;i--)
for(j=248;j>0;j--);
if(P3_5==0)
{
keycnt++;
switch(keycnt)
{
case 1:
TH0=0x06;
TL0=0x06;
TR0=1;
break;
case 2:
TR0=0;
break;
case 3:
keycnt=0; second=0; P0=dispcode[second/10];
break; } while(P3_5==0); }
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==400)
{
tcnt=0;
second++;
if(second==100)
{
second=0; }
P0=dispcode[second/10];
35/ 49
个人收集整理仅供参考学习
P2=dispcode[second%10];
}
}1nowfTG4KI
36/ 49
个人收集整理仅供参考学习
18.“嘀、嘀、……”报警声
1.实验任务
用ATS51单片机产生“嘀、嘀、…”报警声从P1.0端口输出,产生频率为1KHz,根据上面图可知:1KHZ方波从P1.0输出0.2秒,接着0.2秒从P1.0输出电平信号,如此循环下去,就形成我们所需地报警声了.fjnFLDa5Zo
2.电路原理图
图4.18.1
3.系统板硬件连线
(1.把“单片机系统”区域中地P1.0端口用导线连接到“音频放大模块”区 域中地SPKIN 端口上,
(2.在“音频放大模块”区域中地SPKOUT 端口上接上一个8欧或者是16欧地 喇叭;
4. 程序设计方法
37/ 49
个人收集整理仅供参考学习
(1.生活中我们常常到各种各样地报警声,例如“嘀、嘀、…”就是常见地一种声音报警声,但对于这种报警声,嘀0.2秒钟,然后断0.2秒钟,如此循环下去,假设嘀声地频率为1KHz,则报警声时序图如下图所示:tfnNhnE6e5
上述波形信号如何用单片机来产生呢?
(2.由于要产生上面地信号,我们把上面地信号分成两部分,一部分为1KHZ 方波,占用时间为0.2秒;另一部分为电平,也是占用0.2秒;因此,我 们利用单片机地定时/计数器T0作为定时,可以定时0.2秒;同时,也要 用单片机产生1KHZ地方波,对于1KHZ地方波信号周期为1ms,高电平占 用0.5ms,低电平占用0.5ms,因此也采用定时器T0来完成0.5ms地定时;
是0.5ms 地400倍,间了. HbmVN777sL 也就是说以0.5ms定时400 次就达到0.2秒地定时时
最后,可以选定定时/计数器T0地定时时间为0.5ms,而要定时0.2秒则
主程序框图
中断服务程序框图
38/ 49
个人收集整理仅供参考学习
6. 汇编源程序 图4.18.2
FLAG BIT 00H ORG 00H LJMP START
ORG 0BH
LJMP INT_T0
START: MOV T02SA,#00H
MOV T02SB,#00H
CLR FLAG
MOVTMOD,#01H
MOV TH0,#(65536-500) / 256
MOV TL0,#(65536-500)MOD 256
SETB TR0
SETB ET0
SETB EA
SJMP $
INT_T0:
MOV TH0,#(65536-500) / 256 MOV TL0,#(65536-500) MOD 256
INC T02SA |
|
39 / 49
个人收集整理仅供参考学习
MOVA,T02SA
CJNEA,#100,NEXT
INCT02SB
MOVA,T02SB
CJNEA,#04H,NEXT
MOVT02SA,#00H
MOVT02SB,#00H
CPLFLAG
NEXT:JB FLAG,DONE
CPLP1.0
DONE:RETI
END
7.C语言源程序
#include<ATX51.H>
unsignedint t02s;
unsignedchar t05ms;
bitflag;
void main(void)
{
TMOD=0x01; TH0=(65536-500)/256;TL0=(65536-500)%256;
ET0=1; EA=1; while(1); TR0=1;
}
void t0(void) interrupt 1 using 0
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
t02s++;
if(t02s==400)
{
t02s=0;
flag=~flag;
}
if(flag==0)
{
P1_0=~P1_0; }
}V7l4jRB8Hs
40/ 49
个人收集整理仅供参考学习
41/ 49
个人收集整理仅供参考学习
19.“叮咚”门铃
1.实验任务
当按下开关SP1,ATS51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭.83lcPA59W9
2.电路原理图
图4.19.1
3.系统板上硬件连线
(1.把“单片机系统”区域中地P1.0端口用导线连接到“音频放大模块”区 域中地SPKIN 端口上;
(2.在“音频放大模块”区域中地SPKOUT 端口上接上一个8欧或者是16欧地 喇叭;
(3.把“单片机系统”区域中地P3.7/RD端口用导线连接到“式键盘”区
域中地SP1 端口上;
4. 程序设计方法
42 / 49
个人收集整理仅供参考学习
(1.我们用单片机实定时/计数器T0来产生700HZ和500HZ地频率,根据定时/
计数器T0,我们取定时250us,因此,700HZ地频率要经过3次250us地
定时,而500HZ地频率要经过4次250us地定时.mZkklkzaaP
(2.在设计过程,只有当按下SP1之后,才启动T0开始工作,当T0工作完毕,
回到最初状态.
(3.“叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒地
定时,对于以250us为基准定时2000次才可以.AVktR43bpw
5.程序框图
主程序框图
T0中断服务程序框图
43/ 49
个人收集整理仅供参考学习
图4.19.2 T5HZ EQU 30H
T7HZEQU 31H
T05SA EQU 32H
T05SB EQU 33H
FLAG BIT 00H
STOP BIT 01H
SP1 BIT P3.7
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV TMOD,#02H
MOVTH0,#06H
MOV TL0,#06H
SETB ET0 |
|
44/ 49
个人收集整理仅供参考学习
LCALL DELY10MS
JB SP1,NSP
SETB TR0
MOV T5HZ,#00H
MOV T7HZ,#00H
MOV T05SA,#00H
MOV T05SB,#00H
CLRFLAG
CLR STOP
JNB STOP,$
LJMP NSP
DELY10MS:MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0: INC T05SA
MOV A,T05SA
CJNEA,#100,NEXT
MOV T05SA,#00H
INC T05SB MOV A,T05SB CJNEA,#20,NEXT
JB FLAG,STP CPL FLAG LJMP NEXT STP: SETB STOP
CLR TR0
LJMPDONE
NEXT: JB FLAG,S5HZ
INC T7HZ
MOV A,T7HZ
CJNEA,#03H,DONE
MOV T7HZ,#00H
CPL P1.0
LJMP DONE
S5HZ:INC T5HZ
MOV A,T5HZ
CJNE A,#04H,DONE
MOV T5HZ,#00H
CPL P1.0 LJMP DONE
DONE: RETI
45/ 49
个人收集整理仅供参考学习
END
7.C语言源程序
#include<ATX51.H>
unsignedchar t5hz;
unsignedchar t7hz;
unsignedint tcnt;
bitstop;
bitflag;
voidmain(void)
{
unsignedchar i,j;
TMOD=0x02;
TH0=0x06;
TL0=0x06;
ET0=1;
EA=1;
while(1) {
{
for(j=248;j>0;j--); if(P3_7==0)
if(P3_7==0)
{
t5hz=0;
t7hz=0;
tcnt=0;
flag=0;
stop=0;
TR0=1;
while(stop==0);
}
}
}
}
void t0(void) interrupt 1 using 0 {
tcnt++;
46 / 49
个人收集整理仅供参考学习
if(tcnt==2000)
{
tcnt=0;
if(flag==0)
{
flag=~flag;
}
else
{
stop=1;
TR0=0;
}
}
if(flag==0)
{
t7hz++;
if(t7hz==3)
{
t7hz=0;
P1_0=~P1_0;
} } else
t5hz++; if(t5hz==4) { {
t5hz=0;
P1_0=~P1_0;
}
}
}ORjBnOwcEd
47/ 49
个人收集整理仅供参考学习
版权申明
本文部分内容,包括文字、图片、以及设计等在网上搜集整理.
版权为个人所有
Thisarticle includes some parts, including text, pictures, and design.Copyright is personalownership.2MiJTy0dTT
用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其 但同时应遵守著作权法及其他相关法律他非商业性或非盈利性用途,
地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本
文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面 |
theyshall abide by the provisions of copyright law and other relevantlaws, and shall not infringe upon the legitimate rights of thiswebsite and its relevant obligees. In addition, when any content orservice of this article is used for other purposes, writtenpermission and remuneration shall be obtained from the personconcerned and the relevant
obligee.uEh0U1Yfmh
48/ 49
个人收集整理仅供参考学习
转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.IAg9qLsgBX
Reproductionor quotation of the content of this article must be reasonable andgood-faith citation for the use of news or informative public freeinformation. It shall not
misinterpretor modify the original intention of the content of this article, andshall bear legal liability such as copyright.WwghWvVhPE
49 / 49
Copyright © 2019- tjwe.cn 版权所有
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务