Created
November 20, 2018 09:22
-
-
Save OctopusLian/74e36baa755ff476d2c927c801a39004 to your computer and use it in GitHub Desktop.
单片机课程设计-99码表
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;C语言1-10行改为 | |
ORG 0000H ;汇编起始伪指令,功能是规定程序存储器中源程序或数据块存放的起始地址 | |
ajmp STAR ;ajmp无条件跳转指令 | |
ORG 000bh | |
ajmp timer0 | |
anjian equ P1.7 ;位定义 | |
keycount equ 40h | |
shi equ 41h | |
gewei equ 42h | |
aa equ 43h | |
temp equ 44h | |
tab: db 3fh,6h,5bh,4fh,66h ;建表 | |
db 6dh,7dh,7h,7fh,6fh | |
;C语言初始化函数12-14行改为 | |
STAR: | |
acall init ;子程序近程调用指令,功能是主程序调用子程序,调用子程序的范围为2kb | |
;C语言初始化函数39-49行改为 | |
init: | |
mov keycount,#0 ;keycount=0 | |
mov temp,#0 ;temp=1 | |
mov tmod,#01h ;TMOD=0x01 | |
mov TH0,#60 | |
mov TL0,#176 | |
setb EA ;位置位指令,对操作数所指出的位进行置1操作 | |
setb ET0 | |
setb TR0 | |
ret | |
;C语言中15-35行while循环改为 | |
START: | |
acall display | |
inc temp ;加1指令,将操作数所指定的单元或寄存器中的内容加1 | |
acall delay70 ;近程调用delay70 | |
x8: mov r0,keycount | |
cjne r0,#2,F1 ;cjne比较跳转指令,若r0=2则跳转到x8,否则跳转到F1。 | |
ajmp x8 | |
F1: mov r0,temp | |
cjne r0,#99,START ;若r0<99时,重复循环,否则temp=0 | |
mov temp,#0 | |
ajmp START | |
F9: | |
acall key | |
mov r0,keycount | |
cjne r0,#0,F2 ;keycount=0顺序执行,否则跳转到F1 | |
CLR P1.3 ;清0 | |
SETB TR0 | |
F2: mov r0,keycount ;第二次按键 | |
cjne r0,#2,F2 | |
clr TR0 | |
reti | |
mov r0,keycount ;第三次按键 | |
cjne r0,#3,F3 | |
mov temp,#0 | |
mov keycount,#0 | |
;清零操作 | |
timer0: | |
w1: | |
acall key | |
mov TH0,#60 | |
mov TL0,#176 | |
cpl p1.0 | |
JB keycount,x2 | |
ajmp x3 | |
x2: | |
ajmp START | |
clr p1.0 | |
ajmp w1 | |
ajmp w1 | |
x3: mov r0,keycount | |
cjne r0,#3,w1 ;若r0=3则顺序执行,否则跳转到w1 | |
mov temp,#0 | |
mov keycount,#0 | |
ret | |
;C语言58-64行display函数改为 | |
display: | |
mov a,temp | |
mov b,#10 | |
div ab ;除法指令,实现两个八位无符号数的除法操作。 | |
mov r2,A | |
mov r3,B | |
mov dptr,#tab ;16位数据传送使用方式 | |
mov a,r2 | |
movc a,@a+dptr ;查表,先将累加器A的内容与数据指针寄存器DPTR的内容相加,再以其结果为地址,将该地址的结果送入A中 | |
mov P0,a | |
acall delay70 | |
nop ;空指令 | |
mov a,r3 | |
movc a,@a+dptr | |
mov P2,a | |
nop | |
acall delay70 | |
ret | |
;C语言66-76行key函数改为 | |
key: | |
jb anjian,F6 ;若anjian=0则顺序执行,否则跳转到F6 | |
ACALL delay5 | |
inc keycount ;keycount++ | |
F6: | |
ret | |
;C语言78-83行delay函数改为 | |
delay70: | |
mov r6,#70 | |
D2: mov R7,#248 | |
d1: djnz R7,d1 ;248*70次 | |
djnz R6,D2 | |
ret | |
delay5: | |
mov r6,#5 ;消抖。 | |
F7: mov R7,#248 | |
F8: djnz r7,F8 ;248*5次 | |
djnz r6,F7 | |
ret |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<reg51.h> | |
#define uint unsigned int | |
#define uchar unsigned char | |
uchar shi,ge,aa,keycount=0,temp; | |
sbit anjian=P1^7; | |
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; | |
void display(shi,ge); | |
void key (); | |
void init(); | |
void delay(uint z); | |
/*-----主程序-----*/ | |
void main() | |
{ | |
init(); //初始化 | |
while(1) | |
{ | |
key (); | |
if(keycount==1) | |
TR0=1; //开中断 | |
if(keycount==2) | |
TR0=0; | |
if(keycount==3) | |
{ | |
temp=0; | |
keycount=0; | |
} | |
if(aa==10){aa=0; | |
if(temp<=99) | |
{ | |
temp++;display(shi,ge); | |
} | |
else | |
temp=0;} | |
} | |
} | |
/*------初始化程序-------*/ | |
void init() | |
{ | |
keycount=0; | |
temp=0; | |
TMOD=0x01; | |
TH0=(65536-50000)/256; | |
TL0=(65536-50000)%256; | |
EA=1; | |
ET0=1; | |
//TR0=0; | |
} | |
/*-----定时器中断-----*/ | |
void timer0() interrupt 1 | |
{ | |
TH0=(65536-50000)/256; | |
TL0=(65536-50000)%256; | |
aa++; | |
} | |
/*-----显示子程序-----*/ | |
void display(shi,ge) | |
{ | |
shi=temp/10; | |
ge=temp%10; | |
P0=table[shi];;delay(70); | |
P2=table[ge]; ;delay(70); | |
} | |
/*-----按键检测子程序-----*/ | |
void key () | |
{ | |
if(anjian==0) | |
{ | |
delay(5); //消抖 | |
if(anjian==0) | |
keycount++; | |
} | |
//while(anjian==0); | |
//display(shi,ge); //等待按键弹起 | |
} | |
/*-----延时子程序-----*/ | |
void delay(uint z) //延时约1ms | |
{ | |
uint x,y; | |
for(x=z;x>0;x--) | |
for(y=100;y>0;y--); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment