#include<reg51.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define data1 P0
#define data2 P2
sbit s1=P3^6;
sbit s2=P3^7;
bit fangxiang;
uint alt=0,net=0,sl=8*7;
bit mode;
uchar code tab[]={
// 天(0) 大(1) 仁(2) 愛(3) 電(4) 1(5) 電(6) 2(7)
0x10,0x52,0x54,0x78,0x58,0x54,0x12,0x10,/*"0",天*/
0x01,0x12,0x14,0x18,0xF8,0x14,0x12,0x01,/*"1",大*/
0x10,0x20,0x7F,0x84,0x14,0x14,0x14,0x04,/*"2",仁*/
0x10,0x28,0x44,0x22,0x22,0x44,0x28,0x10,/*"3"愛(心形)*/
0x00,0x7C,0x54,0xFF,0x55,0x7D,0x03,0x00,/*"4",電*/
0x00,0x00,0x21,0x41,0xFF,0x01,0x00,0x00,/*"5",1*/
0x00,0x7C,0x54,0xFF,0x55,0x7D,0x03,0x00,/*"6",電*/
0x00,0x22,0x46,0x4A,0x52,0x22,0x00,0x00,/*"7",2*/
};
void delay(uint z) //延時(shí)子函數(shù)
{
uchar x;
for(;z>0;z--)
for(x=110;x>0;x--);
}
void xianshi() //顯示
{
uchar aa,i,num=2;
for(i=0;i<16;i++)
{
switch(i){
case 0:
num=1;
break;
case 1:
num=2;
break;
case 2:
num=4;
break;
case 3:
num=8;
break;
case 4:
num=16;
break;
case 5:
num=32;
break;
case 6:
num=64;
break;
case 7:
num=128;
break;
default :
num=0;
break;
}
P2=0xff-num; //列掃描
data1=tab[net+aa]; //取出上8行數(shù)據(jù)輸出
aa++;
delay(5); //延時(shí)
data1=0; //清屏
P1=0x00; //消除余輝
if(aa>15) aa=0; //字模地址
}
}
void main() //主函數(shù)
{
ET1=1; //使能定時(shí)器0
EA=1; //開啟總中斷
TR1=1; //開始計(jì)數(shù)
while(1) //無(wú)限循環(huán)
{
xianshi(); //顯示
if(s1==0) //檢測(cè)按鍵
{
delay(30); //延時(shí)消抖
TR1=~TR1; //按下暫停 ,暫按繼續(xù)
while(!s1)xianshi();
delay(30);
}
if(s2==0) //檢測(cè)按鍵
{
delay(30); //延時(shí)消抖
fangxiang=~fangxiang; //方向取反
while(!s2)xianshi();
delay(30);
}
}
}
void timer1() interrupt 3
{
alt++;
if(alt==30) //到一定的時(shí)間加以實(shí)現(xiàn)左移
{
alt=0;
if(fangxiang==0) //如果是正向 正向移動(dòng)
{
net=net+2;
if(net>sl) //字移動(dòng)數(shù)量
net=0;
}
else //否則反向移動(dòng)
{
net=net-2;
if(net<2)
net=sl; //字移動(dòng)數(shù)量
}
}
}
|