|
6金钱
#include<reg51.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;//88点阵的口
static u16 i;
u8 lalal[80]={0x00,0x00,0xFE,0x92,0x92,0xF2,0x00,0x00,
0x00,0x00,0xFE,0x92,0x92,0xFE,0x00,0x00,
0x00,0x00,0x80,0x80,0x80,0xFF,0x00,0x00,
0x00,0x00,0xFE,0x12,0x12,0x1E,0x00,0x00,
0x00,0x00,0xF2,0x92,0x92,0x9E,0x00,0x00,
0x00,0x00,0xF0,0x10,0x10,0xFF,0x00,0x00,
0x00,0x00,0x92,0x92,0x92,0xFE,0x00,0x00,
0x00,0x00,0x9E,0x92,0x92,0xF2,0x00,0x00,
0x00,0x00,0x81,0xFF,0xFF,0x81,0x00,0x00,
0x00,0x7E,0x81,0x81,0x81,0x81,0x7E,0x00};//这些是八x八点阵的数码0到9
u8 lalae[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(u16 i)//延时函数
{
while(i--);
}
void time()//中断加定时器
{
TMOD|=0x01;
TH0=0xD8;
TL0=0xF0;;
ET0=1;
EA=1;
TR0=1;
}
void hcsend(u8 dat)//段选
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
void put(u16 g)//显示一个画面 比如0啊9啊
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=lalae[i];
hcsend(lalal[i+8*g]);
delay(70);
hcsend(0x00);
}
}
void main()//主函数
{
time();
while(1);
}
void time0()interrupt 1
{
static u16 a;
static u16 b;
TH0=0xD8;
TL0=0xF0;
b++;
if(b==1000)//累积达到100就是1秒
{
b=0;
switch(a)
{
case 0 : put(a);break;//9
case 1 : put(a);break;//8
case 2 : put(a);break;//7
case 3 : put(a);break;
case 4 : put(a);break;
case 5 : put(a);break;
case 6 : put(a);break;
case 7 : put(a);break;
case 8 : put(a);break;
case 9 : put(a);break;//0
default : break;
}a++;
}
}
上面那个倒计时是可以运行的,放硬件里也没啥问题
但是我放矩阵按键里头就是不行,求大佬赐教
#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define GPIO_KEY P1
u8 KeyValue;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
u8 lalae[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 Lie[64]={0x00,0x00,0x60,0x90,0x48,0x48,0x90,0x60,
0x00,0x60,0x90,0x48,0x48,0x90,0x60,0x00,
0x00,0x60,0x90,0x48,0x48,0x90,0x60,0x00,
0x90,0x48,0x48,0x90,0x60,0x00,0x00,0x60,
0x48,0x48,0x90,0x60,0x00,0x00,0x60,0x90,
0x48,0x90,0x60,0x00,0x00,0x60,0x90,0x48,
0x90,0x60,0x00,0x00,0x60,0x90,0x48,0x48,
0x60,0x00,0x00,0x60,0x90,0x48,0x48,0x90};
u16 i,a,b;
u8 lalal[80]={0x00,0x00,0xFE,0x92,0x92,0xF2,0x00,0x00,
0x00,0x00,0xFE,0x92,0x92,0xFE,0x00,0x00,
0x00,0x00,0x80,0x80,0x80,0xFF,0x00,0x00,
0x00,0x00,0xFE,0x12,0x12,0x1E,0x00,0x00,
0x00,0x00,0xF2,0x92,0x92,0x9E,0x00,0x00,
0x00,0x00,0xF0,0x10,0x10,0xFF,0x00,0x00,
0x00,0x00,0x92,0x92,0x92,0xFE,0x00,0x00,
0x00,0x00,0x9E,0x92,0x92,0xF2,0x00,0x00,
0x00,0x00,0x81,0xFF,0xFF,0x81,0x00,0x00,
0x00,0x7E,0x81,0x81,0x81,0x81,0x7E,0x00};
void delay(u16 i)
{
while(i--);
}
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
delay(1000);
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
}
}
while((a<50)&&(GPIO_KEY!=0xf0))
{
delay(100);
a++;
}
}
void hcsend(u8 dat)
{
u8 a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
delay(3);
SRCLK=0;
}
RCLK=1;
delay(3);
RCLK=0;
}
void love()
{
u8 i;
while(1)
{
u8 b=56;
for(a=0;a<56;a+=8)
{
for(i=0;i<8;i++)
{
P0=lalae[i];
hcsend(Lie[i+a]);
delay(1000);
hcsend(0x00);
}
}
}
}
void time()
{
TMOD|=0x01;
TH0=0xD8;
TL0=0xF0;
ET0=1;
EA=1;
TR0=1;
}
void put(u16 g)//放置画面,比如0啊9啊
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=lalae[i];
hcsend(lalal[i+8*g]);
delay(70);
hcsend(0x00);
}
}
void three()//第3个按键
{
while(1)
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=lalae[i];
hcsend(Lie[i]);
delay(70);
hcsend(0x00);
}
}
}
void main()
{
TMOD|=0x01;
TH0=0xD8;
TL0=0xF0;
ET0=1;
EA=1;
while(1)
{
KeyDown();//扫描按键返回第KeyValue个按键是按下了的
switch(KeyValue)
{
case 0:love();break;//第一个按键按下后
case 1:TR0=1;break;//第二个按键
case 2:three();break;
default:break;
}
}
}
void time0()interrupt 1
{
static u16 b;
TH0=0xD8;
TL0=0xF0;
b++;
if(b==100)
{
b=0;
switch(a)
{
case 0 : put(a);break;//9
case 1 : put(a);break;//8
case 2 : put(a);break;//7
case 3 : put(a);break;
case 4 : put(a);break;
case 5 : put(a);break;
case 6 : put(a);break;
case 7 : put(a);break;
case 8 : put(a);break;
case 9 : put(a);break;//0
default : break;
}a++;
}
}
我知道答案
本帖寻求最佳答案回答被采纳后将获得系统奖励 10 金钱 , 目前已有 1人回答
|
|