高级会员
主题
回帖0
积分508
阅读权限30
注册时间2012-9-23
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2013-5-16 08:42
|
显示全部楼层
现在能显示,也能工作了。只能在硬件上显示没有任何问题,为什么仿真软件不能显示呢?
#include<reg51.h>
char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
char disp[]={4,3,2,1};
unsigned char TempData[8];
sbit clk=P2^7;
sbit dat=P2^6;
sbit K10=P2^2;
sbit K1=P1^4; //左极限位置
sbit K2=P1^3; //--
sbit K3=P1^0;//中间位置
sbit K4=P1^1;//++
unsigned char TIM0H;
unsigned char TIM0L;
void delay(unsigned int i); //函数声明
unsigned int NUM;
unsigned char scan,i,j,byte; //函数声明
/*------------------------------------------------*/
void Delay(unsigned int i)
{
while(--i);
}
/*------------------------------------------------*/
main()
{
TMOD=0x11; //定时器1工作在方式1
TH1=0xb1; //20ms定时
TL1=0xe0;
EA=1;
ET1=1; //允许定时/计数器1 中断
TR1=1; //启动定时/计数器1 中断
TH0=0xfa; //1.5ms定时
TL0=0x24;
ET0=1; //允许定时/计数器0 中断
TR0=1; //启动定时/计数器0 中断
NUM=1500;
while(1)
{
if(K4==0)
{
delay(NUM);
if(K4==0)
{
NUM++;
if(NUM>=20000)NUM=2000;
while(K4==1) delay(NUM);
}
}
if(K2==0)
{
delay(NUM);
if(K2==0)
{
NUM--;
if(NUM<=100)NUM=100;
while(K2==1) delay(NUM);
}
}
if(K3==0)
{
delay(10);
if(K3==0) NUM=1360;
}
if(K1==0)
{
delay(10);
if(K1==0) NUM=1500;
}
TIM0H=((65536-NUM)/256);
TIM0L=((65536-NUM)%256);
TempData[0]=tab[NUM/10000];//分解显示信息,如要显示68,则68/10=6 68%10=8
TempData[1]=tab[(NUM%10000)/1000];
TempData[2]=tab[((NUM%10000)%1000/100)];
TempData[3]=tab[(((NUM%10000)%1000%100)/10)];
TempData[4]=tab[(((NUM%10000)%1000%100)%10)];
TempData[5]=0xc0;
TempData[6]=0xc0;
TempData[7]=0xc0;
TempData[8]=0xc0;
scan=tab[NUM/10000];
for(i=0;i<8;i++)
{
clk=0;
dat=scan&0x40;
delay(50);
//j=TempData[i];
P0=TempData[i];
delay(50);
clk=1;
scan<<=2;
}
}
}
/*********************************************************
中断服务函数
**********************************************************/
void Time1(void) interrupt 3 //3定时器1的中断号 1定时器0的中断号 0外部中断1 2外部中断2 4串口中断
{
TH1=0xb1; //20ms定时
TL1=0xe0;
K10=~K10;
TR0=1; //启动定时/计数器0 中断
}
void Time0(void) interrupt 1 //3定时器1的中断号 1定时器0的中断号 0外部中断1 2外部中断2 4串口中断
{
TH0=TIM0H;
TL0=TIM0L;
K10=~K10;
TR0=0; //关闭定时/计数器0 中断
}
|
|