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十进制数并循环,间隔...