做的是一个点阵显示电子罗盘,原理图如下
QQ图片20141130015128.jpg (93.23 KB, 下载次数: 0)
下载附件
2014-11-30 01:51 上传
现在遇到个困难,想实现用一个按键切换3个不同的图案,可是动态扫描要怎么弄,按我下面的代码写,最后得到的是图案的尾巴。
我该怎么修改才行呢?
另外,如果可以,求大神们解答一下如何写电子罗盘的代码呀。小弟跪谢。
*************************************************代码区**********************************************
#include <reg52.h>
sbit key1=P1^0;
sbit key2=P1^1;
int num;
void delay(int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
int hang[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int lie[8]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
display_xin()
{
P0=0x02;
P2=0x99;
delay(5);
P0=0x04;
P2=0x00;
delay(5);
P0=0x08;
P2=0x00;
delay(5);
P0=0x10;
P2=0x81;
delay(5);
P0=0x20;
P2=0xC3;
delay(5);
P0=0x40;
P2=0xE7;
delay(5);
}
display_num()
{
P0=0x01;
P2=0xc3;
delay(5);
P0=0x02;
P2=0xdf;
delay(5);
P0=0x04;
P2=0xdf;
delay(5);
P0=0x08;
P2=0xdf;
delay(5);
P0=0x10;
P2=0xc3;
delay(5);
P0=0x20;
P2=0xdb;
delay(5);
P0=0x40;
P2=0xdb;
delay(5);
P0=0x80;
P2=0xc3;
delay(5);
}
display_zimu()
{
P0=0x01;
P2=0xbb;
delay(5);
P0=0x02;
P2=0xb7;
delay(5);
P0=0x04;
P2=0xaf;
delay(5);
P0=0x08;
P2=0x9f;
delay(5);
P0=0x10;
P2=0x8f;
delay(5);
P0=0x20;
P2=0xb7;
delay(5);
P0=0x40;
P2=0xBB;
delay(5);
P0=0x80;
P2=0xbd;
delay(5);
}
void keyscan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
num=num+1;
num=num%3;
switch(num)
{
case 0:display_xin();break; //这里怎么进行动态扫描,能用按键切换
case 1:display_zimu();break;
case 2:display_num();
}
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
P0=0xff;
P2=0x00;
while(!key2);
}
}
}
void main()
{
int i,j;
P0=0xff;
P2=0x00;
delay(3000);
P0=0x00;
P2=0x00;
delay(500);
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
P0=hang
;
P2=lie[j];
delay(100);
if(P2==lie[7])
break;
}
delay(100);
P0=0x00;
while(1)
{
keyscan();
}
}
一周热门 更多>