2011-3-8已更新,有结果吱一下
砖头如下:

#inlcude <reg51.h>
sbit OUT=P2^0;
sbit Key=P3^3;
#define DELAYConST 50000//
#define DELAYCONST2 20//简单的定时参数设定。
void Delay(char j)
{
unsigned int k,l;
for(j=0;j<60;j++)
for(k=0;k<DELAYCONST2;k++)
for(l=0;l<DELAYCONST;l++)
;
}
main()
{
char i=3;
while(1)
{
while(i==3)
{
OUT=!Key;
i=P1&3;
}
if(i==2)
{
OUT=0;Delay(1);OUT=1;
}
else
{
OUT=0;Delay(5);OUT=1;
}
while(P1&3==3);//此后按任意键,还可以复位重来。
OUT=0;
i=3;//补充
}
}
希望能对你入门编程有所帮助。如有错误,自行调试。谢谢!
#include "STC12C54.H"
#define uchar unsigned char
#define uint unsigned int
#define dataport P1//P1直接驱动数码管的8个阳极
sbit wei1=P3^3;//再有三个管脚接3个三极管驱动数码管的阴极
sbit wei2=P3^4;
sbit wei3=P3^5;
uint a=0;//中断次数计数,一次50ms,20次为1 秒
//共阴数码管七段码
uchar TABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//延时子程序

void delay1ms(uint t)
{
uint i,j,k;
for(i=t;i>0;i--)
for(j=15;j>0;j--)
for(k=27;k>0;k--);
}
//显示子程序
void display(uint n)
{
uchar a1,a2,a3;
a1=n/100%10;
a2=n/10%10;
a3=n%10;
wei1=1;
dataport=TABLE[a1];
delay1ms(1);
wei1=0;
dataport=0x80|TABLE[a2];//这里多个小数点
delay1ms(1);
wei3=1;
dataport=TABLE[a3];
delay1ms(1);
wei3=0;
}
void init(void)
{
TMOD=0X01;
TH0=(655536-50000)/256;//定时50ms
TL0=(655536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P1M0=0;
P1M1=0xff;//P1口设为推挽输出,驱动能力强
P3M0=0;
P3M1=0x38;//P3.3P3.4 P3.5口设为推挽输出
}
void main(void)//主程序
{
init();//初始状态设定
while(1)
{
display(a/2);//显示计数值,以十分之一秒为单位
}
}
void timer0(void)interrupt 1//中断子程序
{

TH0=(655536-50000)/256;
TL0=(655536-50000)%256;
a++;
if(a==1980)a=0;//1980次是99秒
}


