|
10黑幣
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
#define Lie P1
sbit SHCP = P2^0;
sbit DS = P2^1;
sbit STCP = P2^2;
bit run=0;
uchar code led[ ] ={.....}
uchar code led2[ ] ={....}
uchar code led3[ ] ={....}//點陣碼
void shift16bit(uchar dat1,uchar dat2)
{
uchar i;
STCP=0;
for(i=0;i<8;i++)
{
SHCP=0;
if(dat1 & 0x80) DS=1;
else DS=0;
dat1<<=1;
SHCP=1;
}
for(i=0;i<8;i++)
{
SHCP=0;
if(dat2 &0x80) DS=1;
else DS=0;
dat2<<=1;
SHCP=1;
}
STCP=1;
}
void delay(uint x)
{
uint i;
for(i=0;i<x;i++);
}
void Int0Init()
{
//設置INT0
IT0=1;//跳變沿出發方式(下降沿)
EX0=1;//打開INT0的中斷允許。
EA=1;//打開總中斷
}
void main()
{
unsigned char i;
unsigned char x=0;
unsigned int n;
run=0;
Int0Init(); // 設置外部中斷0
while(1)
{
if(run==2)
{
uchar i,x=0;
uint n;
while(1)
{
for(n=0;n<5;n++) //控制滾動速度
for(i=0;i<16;i++)//控制字形代碼共16列
{
Lie=i;
shift16bit(led3[2*i+2*x+1],led3[2*i+2*x]);//取出每一列的數據
delay(100);
}
x++;
if(x==96) x=0;
}//第三種輸出
}
else if(run==1)
{
uchar i,x=0;
uint n;
while(1)
{
for(n=0;n<5;n++) //控制滾動速度
for(i=0;i<16;i++)//控制字形代碼共16列
{
Lie=i;
shift16bit(led2[2*i+2*x+1],led2[2*i+2*x]);//取出每一列的數據
delay(100);
}
x++;
if(x==160) x=0;
}//第二種輸出
}
else
{
for(n=0;n<5;n++) //控制滾動速度
for(i=0;i<16;i++)//控制字形代碼共16列
{
Lie=i;
shift16bit(led[2*i+2*x+1],led[2*i+2*x]);//取出每一列的數據
delay(100);
}
x++;
if(x==64)
x=0;
}
}
}
//外部中斷0
void int0(void) interrupt 0
{
run=1;
}
|
|