|
如何才能在按键按下后所显示的数码一直存在,再次按下才会熄灭,现在按一下就闪一下数码就灭了
单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ON 0
sbit CS=P1^0;
sbit CLK=P1^1;
sbit D0=P1^2;
sbit SW=P3^2;
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,
0x40,0x79,0x24,0x30,0x19,0xc1};
unsigned char look[]={0,0,0,0};
//函数名:timelms
//函数功能:在T0工作方式下定时1ms,采用查询的方式实现
//形式参数:无
//返回值:无
void time1ms()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
while(!TF0);
TF0=0;
}
//函数名:xianshi
//函数功能:实现4个led动态扫描显示一次,显示"0-f"
//形式参数:无
//返回值:无
void display() //显示
{
unsigned char m,n;
m=0x01;
for(n=0;n<4;n++)
{
P0=m;
P2=led[look[n]];
m<<=2;
time1ms();
P2=0xff;
}
}
void delay(uint i) //软延时
{
while(i--);
}
uchar ADC0831()
{
uchar i,aa;
D0=1;
_nop_();
_nop_();
CS=0;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
for( i=0;i<8;i++)
{
CLK=1;
_nop_();
_nop_();
aa<<=1;
if(D0)
{
aa++;
}
CLK=0;
_nop_();
_nop_();
}
CS=1;
_nop_();
_nop_();
return(aa);
}
void main()
{
uint date;
while(1)
if(SW==ON)
{
date=ADC0831()*196;
look[0]=(date/10000)+16; //除万位取于
look[1]=(date/1000)%10; //除千位取于
look[2]=(date/100)%10 ; //除百位取于
look[3]=(date/10)%10 ; //显示u
display();
delay(10);
}
else
P2=0xff;
}
|
|