标题:
我的单片机广告流水灯课程设计 含c程序代码
[打印本页]
作者:
ljy623579
时间:
2017-5-27 11:04
标题:
我的单片机广告流水灯课程设计 含c程序代码
这是我三月份做的一个广告流水灯,用了两个星期的时间,在老师指导下完成,附件里包含用keil编写的c程序。流水灯的工作方式主要通过键盘实现。数字键0-9分别对应广告灯的10种状态。
#include <REG51.H>
#include <intrins.h>
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code duan[]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
};
unsigned char code wei[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char num,a,w=50,b=0,c,u=50,v,m,k,jj;
unsigned char huan[]={0,1,2,3,4,5};
unsigned int i,d,j,j1,qufan=0;
bit q=0;
int sudu=1;
delay(unsigned xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
smgydbfa()
{
P0=0XFF;dula=1;dula=0;wela=1;wela=0;
dula=1;
P0=duan[huan[num]];
dula=0;
wela=1;
P0=~(0x01<<num);// 1111 1110
wela=0;
num++;
if(num>6)num=0;
}
anniu()
{
P3=0XF0;
if(P3!=0XF0)
{ a++;
if(a>5)
{ a=0;
if((P3!=0X0F)&&(v==0))
{ k=P3;
P3=k|0X0F;
k=P3;v=1;c=1;
switch(k)
{ case 0xEE: u=0;w=0;break;
case 0xED: u=1;w=1;break;
case 0xEB: u=2;w=2;break;
case 0xE7: u=3;w=3;break;
case 0xDE: u=4;w=4;break;
case 0xDD: u=5;w=5;break;
case 0xDB: u=6;w=6;break;
case 0xD7: u=7;w=7;break;
case 0xBE: u=8;w=8;break;
case 0xBD: u=9;w=9;break;
case 0xBB: u=10;w=10;break;
case 0xB7: u=11;w=11;break;
case 0x7E: u=12;w=12;if(q==0) sudu--;break;
case 0x7D: u=13;w=13;if(q==0) sudu++;break;
case 0x7B: u=14;q=~q;break;
case 0x77: u=15;break;
}
}
}
}
else v=0;
}
anniuchuli()
{
jj++;
if(jj>=5+sudu)
{ jj=0;
switch(w)
{
case 0://单个LED灯从左到右
P1=0xFF;
if(qufan==1)
{
if(q==0)d++;
P1=_crol_(0x01,d); //0000 0001 左移
delay(500+sudu*10);
if(d>=8) d=0;
}
else
{
if(q==0)d++;
P1=_crol_(0xFE,d); //1111 1110 左移
delay(500+sudu*10);
if(d>=8) d=0;
}
break;
case 1://两个LED灯从左到右
P1=0xFF;
if(qufan==1)
{ if(q==0)d++;
P1=_crol_(0x03,d); //0000 0011 左移
delay(500+sudu*10);
if(d>=7) d=0;
}
else
{ if(q==0) d++;
P1=_crol_(0xFC,d); //1111 1100 11110011 左移
delay(500+sudu*10);
if(d>=7) d=0;
}
break;
case 2://单个LED灯从右到左
P1=0xFF;
if(qufan==1)
{
if(q==0) d++;
P1=_cror_(0x80,d); //1000 0000 右移
delay(500+sudu*10);
if(d>=8) d=0;
}
else
{ if(q==0) d++;
P1=_cror_(0x7F,d); //0111 1111 右移
delay(500+sudu*10);
if(d>=8) d=0;
}
break;
case 3://两个LED灯从右到左
P1=0xFF;
if(qufan==1)
{ if(q==0) d++;
P1=_cror_(0xC0,d); //1100 0000 右移
delay(500+sudu*10);
if(d>=7) d=0;
}
else
{ if(q==0) d++;
P1=_cror_(0x3F,d); //0011 1111 右移
delay(500+sudu*10);
if(d>=7) d=0;
}
break;
case 4://中间向两边
P1=0xFF;
if(qufan==1)
{
P1=~(0XE7); delay(500+sudu*10); //0001 1000 //P1=~0X18;P1=~0X24;
P1=~(0XDB); delay(500+sudu*10); //0010 0100
P1=~(0XBD); delay(500+sudu*10); //
P1=~(0X7E); delay(500+sudu*10);
}
else{
P1=0XE7; delay(500+sudu*10); //1110 0111
P1=0XDB; delay(500+sudu*10); //1101 1011
P1=0XBD; delay(500+sudu*10); //1011 1101
P1=0X7E; delay(500+sudu*10);
}
break;
case 5://两边向中间
P1=0xFF;
if(qufan==1)
{
P1=~0X7E;delay(500+sudu*10);
P1=~0XBD;delay(500+sudu*10);
P1=~0XDB;delay(500+sudu*10);
P1=~0XE7;delay(500+sudu*10);
}
else
{
P1=0X7E;delay(500+sudu*10);
P1=0XBD;delay(500+sudu*10);
P1=0XDB;delay(500+sudu*10);
P1=0XE7;delay(500+sudu*10);
}
break;
case 6://从左到右依次点亮,全亮后熄灭全部LED灯
P1=0xff;
if(qufan==1)
{
P1=~0XFE;delay(500+sudu*10);
P1=~0XFC;delay(500+sudu*10);
P1=~0XF8;delay(500+sudu*10);
P1=~0XF0;delay(500+sudu*10);
P1=~0XE0;delay(500+sudu*10);
P1=~0XC0;delay(500+sudu*10);
P1=~0X80;delay(500+sudu*10);
P1=~0X00;delay(500+sudu*10);
P1=~0XFF;delay(500+sudu*10);
}
else
{
P1=0XFE;delay(500+sudu*10);
P1=0XFC;delay(500+sudu*10);
P1=0XF8;delay(500+sudu*10);
P1=0XF0;delay(500+sudu*10);
P1=0XE0;delay(500+sudu*10);
P1=0XC0;delay(500+sudu*10);
P1=0X80;delay(500+sudu*10);
P1=0X00;delay(500+sudu*10);
P1=0XFF;delay(500+sudu*10);
}
break;
case 7://从右到左依次点亮,全亮后熄灭全部LED灯
P1=0xff;
if(qufan==1)
{
P1=~0X7F;delay(500+sudu*10);
P1=~0X3F;delay(500+sudu*10);
P1=~0X1F;delay(500+sudu*10);
P1=~0X0F;delay(500+sudu*10);
P1=~0X07;delay(500+sudu*10);
P1=~0X03;delay(500+sudu*10);
P1=~0X01;delay(500+sudu*10);
P1=~0X00;delay(500+sudu*10);
P1=~0XFF;delay(500+sudu*10);
}
else{
P1=0X7F;delay(500+sudu*10);
P1=0X3F;delay(500+sudu*10);
P1=0X1F;delay(500+sudu*10);
P1=0X0F;delay(500+sudu*10);
P1=0X07;delay(500+sudu*10);
P1=0X03;delay(500+sudu*10);
P1=0X01;delay(500+sudu*10);
P1=0X00;delay(500+sudu*10);
P1=0XFF;delay(500+sudu*10);}
break;
case 8://奇数灯及偶数灯交替点亮
P1=0xFF;
if(qufan==1)
{
P1=~0XAA;delay(500+sudu*10);
P1=~0X55;delay(500+sudu*10);
}
else
{
P1=0XAA;delay(500+sudu*10);
P1=0X55;delay(500+sudu*10);
}
break;
case 9://左四位和右四位交替点亮
P1=0xFF;
if(qufan==1)
{
P1=~0X0F;delay(500+sudu*10);
P1=~0XF0;delay(500+sudu*10);
}
else
{
P1=0X0F;delay(500+sudu*10);
P1=0XF0;delay(500+sudu*10);
}
break;
case 10:
break;
case 11://取反
if(qufan==1) qufan=0;
else qufan=1;
break;
case 12://加速
break;
case 13://减速?
break;
case 14://暂停
break;
}
}
}
main()
{
TMOD=0X01; //0000 0001
TH0=0XF5;
TL0=0XAF;
EA=1;
ET0=1;
TR0=1;
for(d=0;d<8;d++)
{
P1=0xff;
P1=_crol_(0xfe,d);
delay(250);
}
P1=0xff;
if(j1==1) {huan[0]=0;huan[1]=0;huan[2]=0;huan[3]=0;huan[4]=0;huan[5]=0;}
while(1)
{
anniuchuli();
if(c>=1) b=w;
huan[4]=b/10;
huan[5]=b%10;
}
}
time_0()interrupt 1
{
TH0=0XF5;
TL0=0XAF;
//if(q==1)
//if(q==0)
smgydbfa();
anniu();
j++;
if(j>500)
{j=0;j1=1;}
}
复制代码
广告流水灯.zip
2017-5-27 10:55 上传
点击文件名下载附件
下载积分: 黑币 -5
46.45 KB, 下载次数: 18, 下载积分: 黑币 -5
作者:
494441786
时间:
2019-2-4 11:58
谢谢分享
作者:
wer12
时间:
2019-6-16 13:02
请问有仿真电路板吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1