| 超级好的51单片机编程例程!工程师必看! | ||
| 单片机简介与单片机的发展历史 |
I/O
口功能实例 |
|
| 定时器实例
(1秒报警,200hz输出 200-250变化输出) |
||
| 软件滤波十六进制六位数加法(数码显示) |
求六位和中的最大值和最小值(数码显示) |
|
| 求减去最大和最小值后的值(数码显示) |
除4所得软件滤波值(数码显示) |
|
| 软件模拟一个振 |
在显示频率输出的同时显示AD值(数码显示) |
|
| 过程检定(数码显示) |
||
| 按键数显,数码管显示加一 | ||
| PWM码简介及解码原理 |
||
| 智能定时的4位电子钟(带定时控制) |
智能红外工业控制器 |
|
|
51单片机学习网热心版主单片东东,收集整理的单片机教学课程(例子程序, 特别推荐!)转载请保留连接! 7.2
十六进制两位数加法器(数码显示) 程序介绍:将ADC0809输入的两个不同电压(相同电 压也可相加,只是为举例说明,所以取不同电压)所对应 的16进制数相加显示出来。实际应用例如:取代加法运放 电路。 程序操作:程序写完上电运行后,用本机配带的钟表 起微调图16所示电位器,输入两个不同电压,数码管会显 示两个不同的对应16进制数,随后数码管会显示两个16 进制数相加的值。 程序实例(add2.asm): ORG
0000H MAIN: ADNUMBER
EQU 30H ;AD转换值 ADDNUMBER
EQU 31H ;加数值1 ADL
EQU 32H ;// ADH
EQU 33H ;ADL转换高低位值 DISL
EQU 34H ;// DISH
EQU 35H ;显示高低位值 ADDTOTAL
EQU 36H ;第一次AD转换值 ADDJW
EQU 37H ;加法进位数 ADDHOLD
EQU 38H ;赋初值//////////////////////////////////////////// MOV
ADDHOLD,#00H MOV
ADDNUMBER,#00H MOV
ADL,#00H MOV
ADH,#00H MOV
DISL,#00H 22 MOV
DISH,#00H MOV
ADDJW,#00H MOV
ADDTOTAL,#00H ;////////////////////////////////////////////////// MAIN1: ACALL
AD ;呼叫AD子程序 ACALL
DELAY ;延时 ACALL
CAIFEN ;呼叫AD值拆分为高 低的程序 ACALL
DISPLAY ;呼叫显示子程序 MOV
A,ADNUMBER ;取AD值 CJNE
A,ADDHOLD,ADD3 ;与上次AD值比 较,不相等,即输入了新的AD值,去AD3执行 AJMP
MAIN1 ;是相等的,证 明没有输入新的AD值,回去显示老的AD值 ADD3:
MOV A,ADDHOLD CJNE
A,#00H,ADD4 MOV
ADDHOLD,ADNUMBER ;有一种情况就 是是第一次进来,AD保持值里面是放的初值00,与取的AD值 不同,是这种情况,也返回去 AJM
MAIN1 ADD4:
MOV ADDNUMBER,ADDHOLD ;是真的输入 了新的AD值,将上次AD值给加数,为调加法程序做准备 MOV
ADDHOLD,ADNUMBER ;将这次的AD 值也保持起来。准备与上一个AD值相加 ;显示这次输入的AD值//////////////////////////////// ACALL
DELAY ACALL
CAIFEN 23 ACALL
DISPLAY ;////////////////////////////////////////////////// DISPLAY1: ACALL
DELAY ;延时 ACALL
ADD1 ;呼叫加法子程序 ACALL
DISPLAY ;显示 LOOP:
AJMP LOOP ;返回主程序 ;///////////////////////////////////////AD转换 AD: MOV
DPTR,#7F00H;指向转换地址 MOV
A,#03H ;指向转换口 MOVX
@DPTR,A ;转换 MOV
R1,#64H D1:
DJNZ R1,D1 ;等100微秒转换完 MOVX
A,@DPTR ;转换后的值给A MOV
ADNUMBER,A ;转换的值给30H RET ;////////////////////////////////////////////////// ;拆分AD值程序////////////////////////////////////// CAIFEN: MOV
A,ADNUMBER ANL
A,#0FH MOV
ADL,A ;取低位 MOV
A,ADNUMBER ANL
A,#0F0H SWAP
A MOV
ADH,A ;取高位 MOV
DISL,ADL 24 MOV
DISH,ADH ;给显示值 RET ;////////////////////////////////////////////////// ;显示////////////////////////////////////////////// DISPLAY: MOV
A,DISL MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D3:
JNB TI,D3 CLR
TI MOV
A,DISH MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D4:
JNB TI,D4 CLR
TI MOV
A,ADDJW MOV
DPTR,#SETTAB MOVC
A,@A+DPTR MOV
SBUF,A D5:
JNB TI,D5 CLR
TI MOV
SBUF,#00H D6:
JNB TI,D6 CLR
TI RET ;////////////////////////////////////////////////// 25 ;加法程序////////////////////////////////////////// ADD1: CLR
C MOV
A,ADDNUMBER ;取上次AD值 ADDC
A,ADDHOLD ;与这次AD值相加 MOV
ADDTOTAL,A ;将此次加的值给和 值 JNC
ADDJW1 ;有无进位? INC
ADDJW ;有进位,进位值给 ADDJW ADDJW1:
ANL A,#0FH MOV
DISL,A ;加值取低位 MOV
A,ADDTOTAL ANL
A,#0F0H SWAP
A MOV
DISH,A ;加值取高位 RET ;////////////////////////////////////////////////// DELAY:
;延时 MOV
R3,#0AH DD1:
MOV R1,#0FFH D2
: MOV R2,#0FFH DJNZ
R2,$ DJNZ
R1,D2 DJNZ
R3,DD1 RET SETTAB: DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 26 0FEH,0F6H DB
0EEH,3EH,9CH,7AH,9EH,8EH END
|