矩阵扫描程序3 单片机课程设计

发布 2022-10-05 18:49:28 阅读 2009

ring equ 22h;响铃标志位

org 0000h

ajmp main

org 000bh

ajmp t0int

org 001bh

ajmp t1int

org 0040h

main: mov r1,#11;初设报警时间11s

mov tmod,#11h;设置未定时器/模式1

mov th0,#0f0h

mov tl0,#0ffh;越高发声频率越高,越尖

mov th1,#3ch

mov tl1,#0b0h;50ms为一次溢出中断

setb ea

setb et0

setb et1 ;允许2个中断,t0/t1/

clr ring

setb tr1

setb tr0;一开始就运行定时器,以开始显示fff.如果想重新计数,重置th1/tl1就可以了。

start: mov r5,#0bh

mov r4,#0bh

mov r3,#0bh

acall display;未触发报警端显示fff

acall delay

jb p3.0,key;,如果"开始键"按下就向下执行,acall bark;按键发声

mov a,r1

mov r6,a;送r1->r6,因为r1中保存了报警时间

ajmp count;进入倒计时程序

key: mov p1,#0f0h ;行线置低电平,列线置输入态。

key0: mov a,p1 ;读列线数据。

cpl a数据取反,“1”有效。

anl a,#0f0h ;屏蔽行线,保留列线数据。

mov r1,a ;存列线数据(r1高4位)

jz gret ;全0,无键按下,返回。

key1: mov p1,#0fh ;行线置输入态,列线置低电平。

mov a, p1 ;读行线数据。

cpl a数据取反,“1”有效。

anl a, #0fh ;屏蔽列线,保留行线数据。

mov r2,a ;存行线数据(r2低4位)

jz gret ;全0,无键按下,返回。

jbc f0,wait ;已有消抖标志,转。

setb f0无消抖标志,置消抖标志。

lcall delay1 ;调用10ms延时子程序(参阅例4.13),消抖。

sjmp key0 ;重读行线列线数据。

gret: ret

wait: mov a,p1 ;等待按键释放。

cpl a ;

anl a,#0fh ;

jnz wait ;按键未释放,继续等待。

key2: mov a,r1 ;取列线数据(高4位)

mov r1,#03h ;取列线编号初值。

mov r3,#03h ;置循环数。

clr c ;

key3: rlc a ;依次左移入c中。

jc key4 ;c=1,该列有键按下,(列线编号存r1)

dec r1 ;c=0,无键按下,修正列编号。

djnz r3,key3 ;判循环结束否?未结束继续寻找有键按下的列线。

key4: mov a,r2 ;取行线数据(低4位)

mov r2,#00h ;置行线编号初值。

mov r3,#03h ;置循环数。

clr c ;

key5: rrc a ;依次右移入c中。

jc key6 ;c=1,该行有键按下,(行线编号存r2)

inc r2 ;c=0,无键按下,修正行线编号。

djnz r3,key5 ;判循环结束否?未结束继续寻找有键按下的行线。

key6: mov a,r2取行线编号。

clr crlc a行编号×2

rlc a行编号×4

add a,r1行编号×4+列编号=按键编号。

mov b,#0ah

div ab

mov 32h,a

mov 33h,b

mov r2,32h

mov r3,33h

count: mov r0,#00h;重置定时器中断次数

mov th1,#3ch

mov tl1,#0b0h;重置定时器

recount:mov a,r6;r6保存了倒计时的时间,之前先将抢答时间或回答时间给r6

mov b,#0ah

div ab;除十分出个位/十位

mov 30h,a;十位存于(30h)

mov 31h,b;个位存于(31h)

mov r5,30h;取十位

mov r4,31h;取个位

mov a,r6

subb a,#07h

mov a,r0

cjne a,#0ah,full

clr ring

ajmp check

full: cjne a,#14h,check;下面是1s的情况,响并显示号数并清r0,重新计

setb ring

mov a,r6

jz quit;计时完毕

mov r0,#00h

dec r6;一秒标志减1

ajmp check

check: jnb p3.1,quit;如按下停止键退出

ajmp nextt

nextt: acall display

ajmp recount

quit: clr ring

ajmp start

display:mov dptr,#dat1;查表显示程序,利用p0口做段选码口输出/p2低三位做位选码输出,

mov a,r2

movc a,@a+dptr

mov p2,#0feh

mov p0,a

acall delay2

mov a,r3

movc a,@a+dptr

mov p2,#0fdh

mov p0,a

acall delay2

mov dptr,#dat2

mov a,r5

movc a,@a+dptr

mov p2,#0fbh

mov p0,a

acall delay2

mov a,r4

movc a,@a+dptr

mov p2,#0f7h

mov p0,a

acall delay2

ret dat1: db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71h ;"灭","1","2","3","4","5","6","7","8","9","灭","f"

dat2:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71h ;第一个为零,其他与上相同,因为十位如果为零显示熄灭

delay1: mov 35h,#08h

loop0: acall display

djnz 35h,loop0

ret ;=延时4236个机器周期===

delay: mov 32h,#12h

loop: mov 33h,#0afh

loop1: djnz 33h,loop1

djnz 32h,loop

ret ===延时4236个机器周期(显示用到)==

delay2: mov 32h,#43h

loop3: mov 33h,#1eh

mov a,r7

loop2: djnz 33h,loop2

djnz 32h,loop3

retbark: setb ring

acall delay1

acall delay1

clr ring;按键发声

rett0int: mov th0,#0ech

mov tl0,#0ffh

jnb ring,out;

cpl p3.6;ring标志位为1时候p3.6口不短取反使喇叭发出一定频率的声音

out: reti

t1int: mov th1,#3ch

mov tl1,#0b0h

单片机课程设计 各题目程序

任务 题目1 数据采集系统的第1个小题。硬件连接 电位器接in0 硬件连接 p3.2接adc0809的eoc 硬件连接 key led cs接cs0 硬件连接 adc0809 cs接cs1 操作方法 1 开机后显示班级 学号 h082 31 2 用的是实验箱键盘最后一排的六个键,依次为 设定 加一 ...

单片机课程设计

可变程序控制器是集微机技术 自动化技术 通讯技术于一体的通用工业控制装置。它可靠性强 性能 比高 使用方便,已在工业控制的各个领域里得到了极为广泛的应用,成为实现工业自动化的一种强有力的工具 1 plc的定义有许多种。国际电工委员会 iec 对plc的定义是 可编程控制器是一种数字运算操作的电子系统...

单片机课程设计

目录。内容提要2 关键词2引言3 一 硬件电路设计3 一 电路板原理3 二 电路元器件3 二 软件设计3 一 秒钟设计方案3 二 时钟设计方案4 结语7单片机时钟设计。内容摘要 一 在实验板上用动态扫描显示00 59秒钟,具体要求如下 一 6m晶振 二 l9 l10显示00 59十进制数并循环,间隔...