仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//延时函数ms
void _delay_ms(uint i)
{
uchar j;
for(;i>0;i--)for(j=0;j<120;j++);
}
//模式变量数组
uchar mo1[]={0x00,0xff};
uchar mo2[]={0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00};
uchar mo3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar mo4[]={0x03,0x0c,0x30,0xc0};
uchar mo5[]={0x0f,0x00};
uchar mo6[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
uchar mo7[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
uchar mo8[]={0x81,0x42,0x24,0x18};
uchar mo9[]={0x18,0x24,0x42,0x81};
//按键停止
sbit key1=P3^0;
//按键开始
sbit key2=P3^1;
//按键切换
sbit key3=P3^2;
//运行变量
uchar run;
//变量
uchar bz=0;
//计时变量
uint jishu1=0;
//不同模式状态
uchar bz1=0;
uchar bz2=0;
uchar bz3=0;
uchar bz4=0;
uchar bz5=0;
uchar bz6=0;
uchar bz7=0;
uchar bz8=0;
uchar bz9=0;
#define PP P0
//普通显示
void xianshi0()
{
PP=~0XFF;
}
//整体闪烁
void xianshi1()
{
jishu1=jishu1+1;if(jishu1>400){jishu1=0;bz1=(bz1+1)%2;}
PP=~mo1[bz1];
}
//单字闪烁
void xianshi2()
{
jishu1=jishu1+1;if(jishu1>400){jishu1=0;bz2=(bz2+1)%2;}
PP=~mo2[bz2];
}
//单字单向移动
void xianshi3()
{
jishu1=jishu1+1;if(jishu1>400){jishu1=0;bz3=(bz3+1)%8;}
PP=~mo3[bz3];
}
//多字单向移动
void xianshi4()
{
jishu1=jishu1+1;if(jishu1>400){jishu1=0;bz4=(bz4+1)%4;}
PP=~mo4[bz4];
}
//多字闪烁
void xianshi5()
{
jishu1=jishu1+1;if(jishu1>400){jishu1=0;bz5=(bz5+1)%2;}
PP=~mo5[bz5];
}
//整体向前
void xianshi6()
{
jishu1=jishu1+1;if(jishu1>400){jishu1=0;bz6=(bz6+1)%8;}
PP=~mo6[bz6];
}
//整体向后
void xianshi7()
{
jishu1=jishu1+1;if(jishu1>400){jishu1=0;bz7=(bz7+1)%8;}
PP=~mo7[bz7];
}
//两边向中间移动、
void xianshi8()
{
jishu1=jishu1+1;if(jishu1>800){jishu1=0;bz8=(bz8+1)%4;}
PP=~mo8[bz8];
}
//中间向两边移动
void xianshi9()
{
jishu1=jishu1+1;if(jishu1>800){jishu1=0;bz9=(bz9+1)%4;}
PP=~mo9[bz9];
}
全部资料51hei下载地址:
流水灯8个模式.rar
(75.92 KB, 下载次数: 53)
|