求各位大大帮忙看看我的单片机c语言程序能否完成实验目标
时间:10-02
整理:3721RD
点击:
/*******************************************************************************
* 单片机流水灯
* 引脚设定:LED = P2,P0 数码管 =p1 最小系统如图
* 流水灯效果;1;LED(P2,PO)熄灭,2:数码管依次显示数字:0-9 ; 3: 数码管熄灭,LED(P2,P0)全亮
4:LED(P2)亮,LED(p0)熄灭 延迟时间 交换亮灭 反复3次 5:LED(P2,P0)全灭,LED(p0)流水效果,延迟时间 LED(P2)流水效果
6:LED(P2,P0)2.4.6 号LED闪烁效果, 7,LED(P2,P0)正流水效果,延迟时间 反流水效果 8:完
*
*
*
*******************************************************************************/
#include<reg51.h>
#include<intrins.h>
#define GPIO_LED0 P0
#define GPIO_LED2 P2
#define GPIO_DIG P1
sbit K1 = P3^1 ; // 左移
sbit K2 = P3^2 ; // 右移
unsigned int j,i,p,t,r,k;
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void Delay10ms();
main()
{
while(1)
{
GPIO_LED0 = 1;
GPIO_LED2 = 1;
i = 10 ;
GPIO_DIG = DIG_CODE[i];
i--;
if(i==0)
{
i = 10;
}
GPIO_LED0 = 0x00;
GPIO_LED2 = 0x00;
p = 0;
while(p<6)
{
Delay10ms();
p++;
if(p==5)
{
GPIO_LED0 = 0xff;
GPIO_LED2 = 0x00;
for(j=0;j<20000;j++)
{Delay10ms();}
GPIO_LED0 = 0x00;
GPIO_LED2 = 0xff;
for(j=0;j<20000;j++)
{Delay10ms();}
GPIO_LED0 = 0xff;
GPIO_LED2 = 0x00;
for(j=0;j<20000;j++)
{Delay10ms();}
GPIO_LED0 = 0x00;
GPIO_LED2 = 0xff;
} }
GPIO_LED0=0xff;
GPIO_LED2=0xff; }
Delay10ms();
while((1)&&(k<50))
{
k++;
GPIO_LED0=t;
t=0xFE;
for(j=0;j<20000;j++)
t=_crol_(t,1);
if(t==0x7f)
{
t=0xff;
for(j=0;j<20000;j++)
GPIO_LED2 =r;
r=0xFE;
for(j=0;j<20000;j++)
r=_crol_(r,1); }
k=0;
GPIO_LED2 = 0xd5;
GPIO_LED0 = 0xd5;
Delay10ms();
GPIO_LED2= 0xff;
GPIO_LED0= 0xff;
for(j=0;j<20000;j++)
GPIO_LED0=t;
GPIO_LED2=t;
t=0xFE;
for(j=0;j<20000;j++);
t=_crol_(t,1); }
if(t==0x7f)
{
t=_cror_(t,1) ; }
}
void Delay10ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);}
* 单片机流水灯
* 引脚设定:LED = P2,P0 数码管 =p1 最小系统如图
* 流水灯效果;1;LED(P2,PO)熄灭,2:数码管依次显示数字:0-9 ; 3: 数码管熄灭,LED(P2,P0)全亮
4:LED(P2)亮,LED(p0)熄灭 延迟时间 交换亮灭 反复3次 5:LED(P2,P0)全灭,LED(p0)流水效果,延迟时间 LED(P2)流水效果
6:LED(P2,P0)2.4.6 号LED闪烁效果, 7,LED(P2,P0)正流水效果,延迟时间 反流水效果 8:完
*
*
*
*******************************************************************************/
#include<reg51.h>
#include<intrins.h>
#define GPIO_LED0 P0
#define GPIO_LED2 P2
#define GPIO_DIG P1
sbit K1 = P3^1 ; // 左移
sbit K2 = P3^2 ; // 右移
unsigned int j,i,p,t,r,k;
unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void Delay10ms();
main()
{
while(1)
{
GPIO_LED0 = 1;
GPIO_LED2 = 1;
i = 10 ;
GPIO_DIG = DIG_CODE[i];
i--;
if(i==0)
{
i = 10;
}
GPIO_LED0 = 0x00;
GPIO_LED2 = 0x00;
p = 0;
while(p<6)
{
Delay10ms();
p++;
if(p==5)
{
GPIO_LED0 = 0xff;
GPIO_LED2 = 0x00;
for(j=0;j<20000;j++)
{Delay10ms();}
GPIO_LED0 = 0x00;
GPIO_LED2 = 0xff;
for(j=0;j<20000;j++)
{Delay10ms();}
GPIO_LED0 = 0xff;
GPIO_LED2 = 0x00;
for(j=0;j<20000;j++)
{Delay10ms();}
GPIO_LED0 = 0x00;
GPIO_LED2 = 0xff;
} }
GPIO_LED0=0xff;
GPIO_LED2=0xff; }
Delay10ms();
while((1)&&(k<50))
{
k++;
GPIO_LED0=t;
t=0xFE;
for(j=0;j<20000;j++)
t=_crol_(t,1);
if(t==0x7f)
{
t=0xff;
for(j=0;j<20000;j++)
GPIO_LED2 =r;
r=0xFE;
for(j=0;j<20000;j++)
r=_crol_(r,1); }
k=0;
GPIO_LED2 = 0xd5;
GPIO_LED0 = 0xd5;
Delay10ms();
GPIO_LED2= 0xff;
GPIO_LED0= 0xff;
for(j=0;j<20000;j++)
GPIO_LED0=t;
GPIO_LED2=t;
t=0xFE;
for(j=0;j<20000;j++);
t=_crol_(t,1); }
if(t==0x7f)
{
t=_cror_(t,1) ; }
}
void Delay10ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);}
程序在仿真器上仿真一下就知道结果了
WIN7的系统我装不起PRotuse,就无法仿真,求具体方法