免费电子智能抢答器(单片机)(一)信息工(4)
2013-05-21 01:16
导读:码 RET;返回 TABLE:DB00H,01H,02H,03H;键码安排表与键盘相同 DB04H,05H,06H,07H DB08H,09H,0AH,0BH DB0CH,0DH,0EH,0FH ORG0200H DISPLAY:MOVR0,#DBUF;串口静态显示子程序 MOVR2,#3;显示3位数
码
RET ;返回
TABLE: DB 00H,01H,02H,03H ;键码安排表与键盘相同
DB 04H,05H,06H,07H
DB 08H,09H,0AH,0BH
DB 0CH,0DH,0EH,0FH
ORG 0200H
DISPLAY:MOV R0, #DBUF ;串口静态显示子程序
MOV R2,#3 ;显示3位数码
MOV DPTR,#SEGTAB;
DISP: MOV A,@R0 ;
MOVC A,@A+DPTR ;取字段码
MOV SCON,#0 ;置串口工作方式0
MOV SBUF,A ;开始发送
JNB TI,$ ;等待发送完毕
CLR TI ;发送完毕,标志位清零
INC R0 ;缓冲单元地址增1
DJNZ R2,DISP ;三位数码发送完否?
RET ;发送完毕,则返回
SEGTAB: DB 0FCH,60H,0DAH,0F2H ;0,1,2,3(共阳极字段码表)
DB 66H,0B6H, 0BEH,0E0H ;4,5,6,7
DB 0FEH,0F6H,0EEH,3EH ;8,9,A,B
DB 9CH,7AH,9EH,8EH ;C,D,+,-
END
抢答器软件程序(附2)
#include <REGX51.H>
#define uchar unsigned char
//共阴码
//uchar code table[]={0x00,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe }; /*代码存储区(64KB)*/
//共阳码
uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0xc2,0x41,0x1f,0x01,0xff };
void delay (void) { /* delay 函数*/
中国大学排名
uchar i,j; /*这个函数执行时间的延迟 */
for (i=0;i<20;i++)
for(j=0;j<250;j++)
;
}
void main (void) {
uchar temp,key,j,time; /* 声明变量temp */
while (1) { /* 无穷循环 */
temp=P0; /* 将P2输入的数据直接放入变量temp当中 */
delay();
temp=P0;
switch(temp) {
case 0xfe: key = 1;break;
case 0xfd: key = 2;break;
case 0xfb: key = 3;break;
case 0xf7: key = 4;break;
case 0xef: key = 5;break;
case 0xdf: key = 6;break;
case 0xbf: key = 7;break;
case 0x7f: key = 8;break;
default : break; }
if(temp==0xff) { for(time=1;time>0;time--) /*无键按下,则关显示*/
{ j=table[0];
SCON=0x00;
&nbs