?? 電子搖搖棒.c
字號:
//================================================//
// 文件名:電子搖搖棒.c //
// 描 述:電子搖搖棒 //
// 設(shè) 計:yiya //
// 時 間:2007.10.27 //
//================================================//
#include <at892051.h>
#include "hz.h"
//引腳定義//
#define LEDH P1
#define LED9 P3_7
#define LED10 P3_4
#define LED11 P3_5
#define LED12 P3_0
#define LED13 P3_1
//變量定義//
unsigned int timecount,time; //時間計數(shù),一幀時間
unsigned char rank,frame,word; //列,幀,字
unsigned char flag; //狀態(tài)標志
unsigned char temp;
//函數(shù)聲明//
//void Display(unsigned char h,unsigned char l);
//主函數(shù)//
main()
{
TMOD=0x12; //定時器0設(shè)為8位自重裝定時模式
TH0=6; //定時器0賦初值(0.5ms)
TL0=6;
ET0=1; //定時器0中斷允許
TR0=1; //定時器0開始計時
ET1=0;
IT0=1; //外部中斷0為下降沿觸發(fā)
PX0=1; //外部中斷0高優(yōu)先級
EX0=1; //外部中斷0允許
IT1=1; //外部中斷1為下降沿觸發(fā)
PX1=1; //外部中斷1高優(yōu)先級
EX1=1; //外部中斷1允許
EA=1; //總中斷允許
while(1)
{
switch(flag)
{
case 1: rank=timecount*72/time; break; //24
// case 2: rank=24-timecount*24/time; break;
case 2: rank=0; break;
default: rank=0; frame=0; word=0; break;
}
if(rank>=(11+9+9) & rank<=(22+9+9))//if(rank>=11 & rank<=22)
{
LEDH=~GB_12[word].Msk[rank-(11+9+9)];
temp=GB_12[word].Msk[rank+1-9-9];
// LEDH=~GB_12[word].Msk[rank-1];
// temp=GB_12[word].Msk[rank+11];
// LEDH=~GB_12[word].Msk[22-rank];
// temp=GB_12[word].Msk[35-(rank+1)];
LED9=!(temp&0x80);
LED10=!(temp&0x40);
LED11=!(temp&0x20);
LED12=!(temp&0x10);
// LED13=!(temp&0x08);
}
else if(rank>=(33+9) & rank<=(44+9))
{
LEDH=~GB_12[word+1].Msk[rank-33-9];
temp=GB_12[word+1].Msk[rank+1-22-9];
// LEDH=~GB_12[word].Msk[22-rank];
// temp=GB_12[word].Msk[35-(rank+1)];
LED9=!(temp&0x80);
LED10=!(temp&0x40);
LED11=!(temp&0x20);
LED12=!(temp&0x10);
// LED13=!(temp&0x08);
}
else if(rank>=55 & rank<=66)
{
LEDH=~GB_12[word+2].Msk[rank-55];
temp=GB_12[word+2].Msk[rank+1-44];
// LEDH=~GB_12[word].Msk[22-rank];
// temp=GB_12[word].Msk[35-(rank+1)];
LED9=!(temp&0x80);
LED10=!(temp&0x40);
LED11=!(temp&0x20);
LED12=!(temp&0x10);
// LED13=!(temp&0x08);
}
else
{
LEDH=0xff;
LED9=1;
LED10=1;
LED11=1;
LED12=1;
// LED13=1;
}
// LED13=rank!=frame;
// if(rank>=4 & rank<=15) Display(GB_12[word].Msk[rank-4],GB_12[word].Msk[rank+8]);
// else Display(0x00,0x00);
}
}
/*
//顯示函數(shù)
void Display(unsigned char h,unsigned char l)
{
LEDH=~h;
LED9=!(l&0x80);
LED10=!(l&0x40);
LED11=!(l&0x20);
LED12=!(l&0x10);
// LED13=!(l&0x08);
}
*/
//***** 外部中斷0入口 *****//
void int0(void) interrupt 0 using 1
{
EX0=0; //外部中斷0禁止
IE1=0; //清外部中斷1觸發(fā)標志
EX1=1; //外部中斷1允許
time=timecount; //讀取時間
timecount=0; //時間計數(shù)器清零
TL0=6;
if(frame<23) frame++; //幀計數(shù)
else
{
frame=0;
if(word<11) word+=3; //字計數(shù)
else word=0;
}
if(time<2500) flag=2; //從右至左擺動狀態(tài)
else flag=0; //超時狀態(tài)
}
//***** 外部中斷1入口 *****//
void int1(void) interrupt 2 using 3
{
EX1=0; //外部中斷1禁止
IE0=0; //清外部中斷0觸發(fā)標志
EX0=1; //外部中斷0允許
// time=timecount; //讀取時間
timecount=0; //時間計數(shù)器清零
TL0=6;
if(frame<23) frame++; //幀計數(shù)
else
{
frame=0;
if(word<11) word+=3; //字計數(shù)
else word=0;
}
if(time<2500) flag=1; //從左至右擺動狀態(tài)
else flag=0; //超時狀態(tài)
}
//***** 定時器0 *****入口//
void t0(void) interrupt 1 using 2
{
if(timecount<2500) timecount++;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -