强联c51程序方面

来源:百度知道 编辑:UC知道 时间:2024/06/29 22:44:34
#include<at89x51.h>
int m,n,p;
int i ,j=1;
int table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delay(void)
{
for(m=50;m>0;m--)
for(n=50;n>0;n--)
for(p=5;p>0;p--);
}
void delay1(void)
{
for(m=5;m>0;m--)
for(n=5;n>0;n--)
for(p=5;p>0;p--);
}
P3_7=1;
P1_0=0;P0=table[0];delay1();
P1_1=0;P0=table[0];delay1();
for( i=0;i<10;i++)
{
P1_1=0;
P0=table[i];
delay();
}
if(i==10)
{
P1_0=0;
P0=table[j++];
delay1();
P1_1=0;
P0=table[0];
delay();
}
}
请问在强联C51中这样能实现计数吗?
如果不能 应该怎么改? 十分感谢!
谢谢你的答案 不过你那程序是不是只适用于STC51,好像不适用于强联C51系列的单片机啊

额...你写的程序真......
void delay(unsigned char z)//延时程序这么写,如果晶振是11.059MHZ,z=100,就是1MS
{
for(m=z;m>0;m--)
for(n=110;n>0;n--);
}延时程序用不了写2个,
你的程序写的又点乱,还有,你用三个IO口计数是不是浪费了,你了解硬件了吗,可以用两个锁存器控制,这样就可以用1个IO口完成技术,
如果要精准的计数,建议你学下定时器。
给你一个写好的

#include<reg52.h>
sbit duan=P3^3;//段选通端
sbit wei=P3^4;//位选通端
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表
table2[]={0x02,0x01,0x08,0x04,0x20,0x10,0x80,0x40};//0~7依次位码表
//以下是延时函数
void Delay(unsigned int i) //延时程序,i是形式参数
{
unsigned int j;
for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值
for(j=0;j<125;j++)
{;}
}
//以下是主函数
void main()
{
unsigned char a;
unsigned int m,upbit,lowbit,hibit,cnt=1000;
while(1)
{
for(m=0;m<cnt;m++)
{
hibit=m/100; //提取百位
upbit=(m-hibit*100)/10; //提取十位
lowbit=m%10;