返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

<>51单片机学习网热心版主单片东东,收集整理的单片机教程课程(例子程序, 特别推荐!)转载请保留连接!
单片机简介与单片机的发展历史I/O 口功能实例流水灯和方波试验
定时器实例 (1秒报警,200hz输出 200-250变化输出)

数码管0—9999 的循环显示

ADC0809模拟输入电压,在数码管上显示出来

ADC0809输入的两个不同电压数相加显示出来

软件滤波十六进制六位数加法(数码显示)求六位和中的最大值和最小值(数码显示)
求减去最大和最小值后的值(数码显示)除4所得软件滤波值(数码显示)
软件模拟一个振动传感器软件搜频的全过程在显示频率输出的同时显示AD值(数码显示)
过程检定(数码显示)

DA 转换三角波 正旋波 梯形波(dac0832)

串口通信,看到画面——“我爱单片机”。

按键数显,数码管显示加一
PWM码简介及解码原理--红外遥控原理与解码程序
智能定时的4位电子钟(带定时控制)智能红外工业控制器

                         

51单片机学习网热心版主单片东东,收集整理的单片机教程课程(例子程序, 特别推荐!)转载请保留连接!

<>如果您有任何不明白的地方请参加51单片机学习网论坛讨论:

7.4过程检定

程序介绍(7.41—7.43):本程序 用软件模拟了一个振动传感器软件搜频的全过程。振动传感器是通过在激励端

给传感器一定频率的电压,在感应端感应一定频率的电压值。所以它能测很多东西,比如不同的压力所感应不同电

压值,不同油品粘度也可以感应不同电压值,等等。但是这存在一个问题?就是传感器何时才能达到谐振状态呢,

于是这就要给激励端变化的频率来测感应端的电压,感应端的电压在这个变化频率内何时最大,这时所给的频率就

是所搜到的谐振频率。以前没有单片机软件控制时,我们只能通过硬件不断的给激励端变化频率电压,然后测感应

端电压,来搜到谐振频率。7.41是在p1.0口输出并显示变化的频率200-250hz(省略了2的显示),7.42在7.41的基础

上增加了AD输入量的显示。

7.43将会在您输入变化AD值后,将搜到的AD值与频率值显示出来。实际应用如压力检测,粘度检测。

程序操作:因为7.41和7.42只是7.43的铺垫。所以在7.43程序写入并上电后,您将会在数码管左两位看到

200-250HZ变化频率的显示(省略2),右边看到输入AD值的显示。您可以用钟表起微调AD输入的电位器,使AD

值上升,下降。在变化频率显示完后,程序将会把您所输入的最大的AD值与其所对应的频率一起显示出来,这就是

软件模拟的全过程。

7.41 P1.0口产生200——250HZ变化频率输出(数

码显示)

程序实例(f25dis.asm):

ORG 0000H

AJMP MAIN

ORG 001BH

AJMP DIN1

MAIN:

;定义频率200和300//////////////////////////////////

F2H EQU 30H

60

F2L EQU 31H

F3H EQU 32H

F3L EQU 33H

;/////////////////////////////////////////////////

DISFLAG EQU 34H ;显示标志

DISL EQU 35H ;显示低位

DISH EQU 36H ;显示高位

;定义频率保持初值//////////////////////////////////

MOV R1,#50

MOV R2,#02H

;//////////////////////////////////////////////////

;显示赋初值////////////////////////////////////////

MOV DISFLAG,#00H

MOV DISL,#00H

MOV DISH,#00H

;//////////////////////////////////////////////////

;频率赋初值////////////////////////////////////////

MOV F2H,#0F6H

MOV F2L,#3BH

MOV F3H,#0F8H

MOV F3L,#2FH

;/////////////////////////////////////////////////

CLR P1.0 ;在P1.0口产生一个低电

平,一个脉冲是由一个高电平和一个低电平组成的

MOV TMOD,#00010000B;定时器工作于方式1

MOV TH1,F2H

MOV TL1,F2L ;200HZ输出

SETB EA ;开总中断

61

SETB TR1 ;开定时器1运行

SETB ET1 ;开定时器1允许

DISPLAY:

MOV SBUF,#00H

D1: JNB TI,D1

CLR TI

MOV SBUF,#00H

D2: JNB TI,D2

CLR TI

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

ACALL DELAY

AJMP DISPLAY

LOOP: AJMP LOOP

DIN1:

CPL P1.0 ;取反P1.0口,实际是为了不断

的将p1.0的电平关系转换,即产生了频率

;频率保持时间//////////////////////////////////////

62

DJNZ R1,RE

MOV R1,#50

DJNZ R2,RE

MOV R2,#02H

;//////////////////////////////////////////////////

INC DISFLAG

MOV A,DISFLAG

CJNE A,#0AH,FF

MOV DISFLAG,#00H

INC DISL

MOV A,DISL

CJNE A,#0AH,FF

MOV DISL,#00H

INC DISH

;/////////////////////////////////////////////////

FF: MOV A,F2H

CJNE A,F3H,XIA ;频率高位到300HZ的高位

了吗?

AJMP JIA

;频率高位没到300HZ的高位值,直接将低位值加1///////

XIA: INC F2L

MOV A,F2L

CJNE A,#00H,RE

INC F2H

MOV A,F2H

CJNE A,F3H,RE

;//////////////////////////////////////////////////

;频率高位加到300HZ的高位值了,低位加一,到300HZ的低

63

位值了吗,没到出去,到了关定时器///////////////////

JIA:

INC F2L ;到了将200HZ频率的低位加1

MOV A,F2L

CJNE A,#F3L,RE

CLR TR1

;//////////////////////////////////////////////////

RE:

MOV TH1,F2H

MOV TL1,F2L

RETI

DELAY:

MOV R3,#0FFH

D5: DJNZ R3,D5

RET

SETTAB:

DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,

0FEH,0F6H

DB 0EEH,3EH,9CH,7AH,9EH,8EH ;数显代码

END

7.42 在显示频率输出的同时显示AD值(数码显示)

程序实例(ad25dis.asm):

ORG 0000H

AJMP MAIN

ORG 001BH

AJMP DIN1

MAIN:

64

;定义频率200和300//////////////////////////////////

F2H EQU 30H

F2L EQU 31H

F3H EQU 32H

F3L EQU 33H

;//////////////////////////////////////////////////

DISFLAG EQU 34H ;显示标志

DISL EQU 35H ;显示低位

DISH EQU 36H ;显示高位

ADNUMBER EQU 37H ;AD值

DISADL EQU 38H ;显示AD低位

DISADH EQU 39H ;显示AD高位

;定义频率保持初值//////////////////////////////////

MOV R1,#100

MOV R2,#02H

;//////////////////////////////////////////////////

MOV ADNUMBER,#00H ;AD转换数初值

;显示高低位初值///////////////////////////////

MOV DISADL,#00H

MOV DISADH,#00H

;//////////////////////////////////////////////////

;显示赋初值////////////////////////////////////////

MOV DISFLAG,#00H

MOV DISL,#00H

MOV DISH,#00H

;//////////////////////////////////////////////////

;频率赋初值////////////////////////////////////////

MOV F2H,#0F6H

65

MOV F2L,#3BH

MOV F3H,#0F8H

MOV F3L,#2FH

;//////////////////////////////////////////////////

CLR P1.0 ;在P1.0口产生一

个低电平,一个脉冲是由一个高电平和一个低电平组成的

MOV TMOD,#00010000B;定时器工作于方

1

MOV TH1,F2H

MOV TL1,F2L ;200HZ输出

SETB EA ;开总中断

SETB TR1 ;开定时器1运行

SETB ET1 ;开定时器1允许

ADDIS:

ACALL AD ;呼叫AD子程序

;将转换的数字量屏蔽高位低位送DISADL保存////////////

MOV A,ADNUMBER

ANL A,#0FH

MOV DISADL,A

;//////////////////////////////////////////////////

;将转换的数字量屏蔽低位,将高位送DISADH保存////////

MOV A,ADNUMBER

ANL A,#0F0H

SWAP A

MOV DISADH,A

;//////////////////////////////////////////////////

DISPLAY:

MOV A,DISADL

66

MOV DPTR,#SETTAB

MOVC A,@A+DPTR

MOV SBUF,A

D1: JNB TI,D1

CLR TI

MOV A,DISADH

MOV DPTR,#SETTAB

MOVC A,@A+DPTR

MOV SBUF,A

D2: JNB TI,D2

CLR TI

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

ACALL DELAY

AJMP ADDIS

LOOP: AJMP LOOP

DIN1:

PUSH ACC

67

CPL P1.0 ;取反P1.0口,实际是为了

不断的将p1.0的电平关系转换,即产生了频率

;频率保持时间//////////////////////////////////////

DJNZ R1,RE

MOV R1,#100

DJNZ R2,RE

MOV R2,#02H

;//////////////////////////////////////////////////

INC DISFLAG

MOV ` A,DISFLAG

CJNE A,#0AH,FF

MOV DISFLAG,#00H

INC DISL

MOV A,DISL

CJNE A,#0AH,FF

MOV DISL,#00H

INC DISH

;//////////////////////////////////////////////////

FF: MOV A,F2H

CJNE A,F3H,XIA ;频率高位到300HZ的高位

了吗?

AJMP JIA

;频率高位没到300HZ的高位值,直接将低位值加1///////

XIA: INC F2L

MOV A,F2L

CJNE A,#00H,RE

INC F2H

MOV A,F2H

68

CJNE A,F3H,RE

;//////////////////////////////////////////////////

;频率高位加到300HZ的高位值了,低位加一,到300HZ的低

位值了吗,没到出去,到了关定时器///////////////////

JIA:

INC F2L ;到了将200HZ频率的低位

1

MOV A,F2L

CJNE A,#F3L,RE

CLR TR1

;//////////////////////////////////////////////////

RE:

MOV TH1,F2H

MOV TL1,F2L

POP ACC

RETI

AD: MOV DPTR,#7F00H ;指向转换地址

MOV A,#03H ;指向转换口

MOVX @DPTR,A ;转换

MOV 40H,#64H

D6: DJNZ 40H,D6 ;等100微秒转换完

MOVX A,@DPTR ;转换后的值给A

MOV ADNUMBER,A ;转换的值给30H

RET

DELAY:

MOV R3,#0FFH

D5: DJNZ R3,D5

RET

69

SETTAB:

DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,

0FEH,0F6H

DB 0EEH,3EH,9CH,7AH,9EH,8EH ;数显代码

END