求一段简单的51单片机c程序

外部输入低电平,输出与输入低电平时间差Δt有关的函数,(如300/Δt)用动态显示用数码管输出结果

注意:在此程序中P3为位选控制口,P0为段选控制口。

#include<reg52.h> // 包含52单片机寄存器定义的头文件
void delay(void) //延时函数,延时约0.6毫秒
{
unsigned char i;
for(i=0;i<200;i++)
;//空循环 起延时作用
}
void main(void)
{

P0=0xff; //初始化端口
P3=0xff; //初始化端口
while(1) //无限循环 //假定 数码管从左到右依次是DS0-DS7
{
P3=0xfe; //P3.0引脚输出低电平,DS0点亮
P0=0xf9; //数字1的段码
delay();
P3=0xfd; //P3.1引脚输出低电平,DS1点亮
P0=0xa4; //数字2的段码
delay();
P3=0xfb; //P3.2引脚输出低电平,DS2点亮
P0=0xb0; //数字3的段码
delay();
P3=0xf7; //P3.3引脚输出低电平,DS3点亮
P0=0x99; //数字4的段码
delay();

P3=0xef; //P3.4引脚输出低电平,DS4点亮
P0=0x92; //数字5的段码
delay();
P3=0xdf; //P3.5引脚输出低电平,DS5点亮
P0=0x82; //数字6的段码
delay();
P3=0xbf; //P3.6引脚输出低电平,DS6点亮
P0=0xf8; //数字7的段码
delay();
P3=0x7f; //P3.7引脚输出低电平,DS7点亮
P0=0x80; //数字8的段码
delay();
P3=0xff;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-10
刚看到你的问题补充 ,我写的只是最简单的程序 !!
#include<reg51.h>
void main(void)
{
while(1)
{
P0=0xFF;
}
}
第2个回答  2010-10-11
利用外部中断,当外部输入低电平是,产生中断,定时器开始计时,当下个外部输入的低电平来时,关闭定时器,保存定时器的值,进行计算
第3个回答  2010-10-23
#include<at89x51.h>
#define uchar unsigned char

uchar num=12;
uchar code tab[10]={
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/

};
void delayms(uchar);
void display(void);
void detectkey() ;
void main()
{
while(1)
{

display();
detectkey();
}

}
void display()
{

P2_1=0;
P0=tab[num%10];
delayms(1);
P2_1=1;

P2_0=0;
P0=tab[num/10];
delayms(1);
P2_0=1;

}
void detectkey()
{
if(P3_7==0)
{
num++; P2_6=0;
// num%=100;//num=num%100
if(num==100) num=0 ;
while(P3_7==0) display();
P2_6=1;
}
if(!P3_6)
{
P2_6=!P2_6; P1_0=!P1_0;
while(P3_6==0) display(); //按键释放过程
;
}
}
/*************************
延时处理程序
**************************/
void delayms(uchar no)
{
uchar i,j;
for(i=0;i<no;i++)
{
for(j=0;j<164;j++); //3微秒
for(j=0;j<164;j++);
}
}