数据存储器扩展,一部分空间存放0~9,一部分空间存放A~F,当按下按键K1时,取出0~9的数据在数码管上依次显示;当按下按键K2时,取出A~F的数据在数码管上依次显示;再keil 4上用了c语言做了程序,软件转换的汇编看不懂,有没有大神能写一个完整的汇编
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei=P2^0;
sbit KEY1=P1^1;
sbit KEY2=P1^2;
uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar table2[]={0x77,0x7c,0x39,0x5e,0x79,0x71};
uint flag,t1,t2,time;
void delayms(uint xms) //延时函数 1ms
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uint a)
{
if(a==1)
{
wei=1;
P0=table1[t1];
}
if(a==2)
{
wei=1;
P0=table2[t2];
}
}
void main()
{
TMOD=0x22; // 定时器 0 ,1
TH0=0x06;
TL0=0x06; // 定时器0赋初值 计时 0.25ms,1000 次为 0.25s,4000 次为一秒
TH1=0x06;
TL1=0x06; // 定时器1赋初值 计时 0.25ms,1000 次为 0.25s,4000 次为一秒
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
EA=1;
flag=2;
time=0;
t1=0;
t2=0;
TR0=1;
TR1=1;
while(1)
{
switch(flag)
{
case 1:display(1);break;
case 2:display(2);break;
}
if(KEY1==0)
{
delayms(3);
if(KEY1==0)
{
flag=1;
}
}
if(KEY2==0)
{
delayms(4);
if(KEY2==0)
{
flag=2;
}
}
}
}
void time0(void) interrupt 1 //定时器0中断,定时器0用于抢答倒计时
{
time++;
if(time==4000)
{
t1++;
if(t1==10)
{
t1=0;
}
time=0;
}
}
//定时器1中断,定时器1用于作答倒计时
void time1() interrupt 3
{
time++;
TH1=0x06;
TL1=0x06;
if(time==4000)
{
time=0;
t2++;
if(t2==6)
{
t2=0;
}
}
}
|