搖搖棒
用AT89S52做
以下資料供參考
IMG_20160403_233909.jpg (310.58 KB, 下載次數(shù): 82)
下載附件
2016-8-19 11:26 上傳
IMG_20160403_224329.jpg (492.04 KB, 下載次數(shù): 84)
下載附件
2016-8-19 11:26 上傳
IMG_20160402_215920.jpg (539.21 KB, 下載次數(shù): 87)
下載附件
2016-8-19 11:25 上傳
IMG_20160402_215914.jpg (544.36 KB, 下載次數(shù): 91)
下載附件
2016-8-19 11:25 上傳
IMG_20160402_215535.jpg (707.76 KB, 下載次數(shù): 93)
下載附件
2016-8-19 11:25 上傳
IMG_20160404_002623.jpg (565.9 KB, 下載次數(shù): 77)
下載附件
2016-8-19 11:25 上傳
- #include <AT89X52.h>
- #define uchar unsigned char
- #define uint unsigned int //宏定義
- #define KEY P3_7 //定義畫面切換按鍵
- uchar KY; //KY作用在后面說明
- uchar disp; //顯示漢字指針
- uchar pic=0,num=0; //pic為按鍵次數(shù);num為中斷次數(shù)
- uchar code love[] = {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x20,0xC0,0x20,0x00,0x13,
- 0x00,0x0C,0x00,0x03,0xC0,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x08,0x0C,0x08,0x0A,0x08,0x09,0x88,0x08,0x48,0x08,0x28,0x08,
- 0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,
- 0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0xF0,0x0F,0x10,0x00,0x08,0x00,0x08,0x00,
- 0x08,0x00,0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"E:\搖搖棒資料\yzm.BMP",0*/
- /* (64 X 16 ) */
- };
- uchar code loveyou[] = {
- 0x00,0x00,0x00,0x00,0xF0,0x0F,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0xFF,0xFF,
- 0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x04,0xF0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,/*"中",0*/
- /* (16 X 16 , 宋體 ) */
- 0x20,0x10,0x20,0x08,0x24,0x04,0x24,0x02,0x24,0x01,0x24,0x0D,0xBF,0x0B,0x64,0x09,
- 0x24,0x49,0x34,0x89,0x28,0x49,0x24,0x39,0x22,0x01,0x20,0x00,0x20,0x00,0x00,0x00,/*"考",1*/
- /* (16 X 16 , 宋體 ) */
- 0x10,0x80,0x10,0x40,0x10,0x30,0xFF,0x0F,0x10,0x40,0x10,0x80,0xF0,0x7F,0x00,0x00,
- 0x00,0x00,0xF8,0x7F,0x08,0x20,0x08,0x20,0x08,0x20,0xF8,0x7F,0x00,0x00,0x00,0x00,/*"加",2*/
- /* (16 X 16 , 宋體 ) */
- 0x10,0x04,0x60,0x04,0x02,0x7E,0x8C,0x01,0x00,0x00,0xF0,0xFF,0x10,0x42,0x10,0x42,
- 0x10,0x42,0xFF,0x7F,0x10,0x42,0x10,0x42,0x10,0x42,0xF0,0xFF,0x00,0x00,0x00,0x00,/*"油",3*/
- /* (16 X 16 , 宋體 ) */
- };
- uchar code hehe[] = {
- 0x80,0x40,0x40,0x40,0x30,0x42,0x1E,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0xFF,0x7F,
- 0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x40,0x00,0x40,0x00,0x00,/*"生",0*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x82,0x40,0x82,0x40,0x82,0x40,0x82,0x40,
- 0x82,0x40,0x82,0x40,0x82,0x40,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"日",1*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x01,0xE0,0x00,0x00,0x00,0xFF,0xFF,0x10,0x00,0x20,0x81,0x08,0x41,0x08,0x31,
- 0x08,0x0D,0xFF,0x03,0x08,0x0D,0x08,0x31,0xF8,0x41,0x00,0x81,0x00,0x81,0x00,0x00,/*"快",2*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x00,0x00,0x20,0xE0,0x10,0x9C,0x08,0x84,0x06,0x84,0x40,0x84,0x80,0xF4,0x7F,
- 0x82,0x00,0x82,0x00,0x83,0x02,0x82,0x04,0x80,0x08,0x80,0x30,0x00,0x00,0x00,0x00,/*"樂",3*/
- /* (16 X 16 , 宋體 ) */
- };
- unsigned char code hanzi[] = {
- 0x00,0x08,0x00,0x08,0xE0,0x08,0x9F,0x08,
- 0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,
- 0x88,0x08,0x88,0x48,0x88,0x80,0x88,0x40,
- 0x88,0x3F,0x08,0x00,0x00,0x00,0x00,0x00,/*"與",0*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x01,0x80,0x00,0x60,0x00,0xF8,0xFF,
- 0x07,0x00,0x40,0x10,0x20,0x0C,0x18,0x03,
- 0x0F,0x40,0x08,0x80,0xC8,0x7F,0x08,0x00,
- 0x08,0x01,0x28,0x06,0x18,0x18,0x00,0x00,/*"你",1*/
- /* (16 X 16 , 宋體 ) */
- 0x10,0x08,0x10,0x04,0x10,0x03,0xD0,0x00,
- 0xFF,0xFF,0x90,0x00,0x10,0x03,0x00,0x00,
- 0xFE,0xFF,0x22,0x42,0x22,0x42,0x22,0x42,
- 0x22,0x42,0xFE,0xFF,0x00,0x00,0x00,0x00,/*"相",2*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x01,0x80,0x00,0x60,0x00,0xF8,0xFF,
- 0x07,0x02,0x20,0x02,0x22,0x02,0x2C,0x02,
- 0x20,0x02,0xFF,0xFF,0x20,0x02,0x28,0x02,
- 0x24,0x02,0x22,0x02,0x00,0x02,0x00,0x00,/*"伴",3*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x10,0x02,0x08,0x02,0x04,0x02,0x02,
- 0x02,0x01,0x82,0x00,0x42,0x00,0xF2,0xFF,
- 0x0E,0x00,0x42,0x00,0x82,0x00,0x02,0x01,
- 0x02,0x02,0x02,0x0C,0x00,0x00,0x00,0x00,/*"不",4*/
- /* (16 X 16 , 宋體 ) */
- 0x04,0x40,0x04,0x38,0x04,0x00,0xFC,0x00,
- 0x84,0x3C,0x84,0x40,0x85,0x40,0x86,0x42,
- 0x84,0x4C,0x84,0x40,0x84,0x40,0x84,0x70,
- 0x84,0x04,0x04,0x08,0x04,0x30,0x00,0x00,/*"忘",5*/
- /* (16 X 16 , 宋體 ) */
- 0x08,0x02,0x08,0x01,0x89,0x00,0xEA,0xFF,
- 0x18,0x01,0x88,0x86,0x00,0x40,0x04,0x20,
- 0x04,0x18,0xFC,0x07,0x04,0x40,0x04,0x80,
- 0x04,0x40,0xFC,0x3F,0x00,0x00,0x00,0x00,/*"初",6*/
- /* (16 X 16 , 宋體 ) */
- 0x04,0x20,0x04,0x20,0xF4,0x10,0x94,0x10,
- 0x94,0x08,0x94,0xFC,0x95,0x42,0xFE,0x21,
- 0x94,0x02,0x94,0x04,0x94,0x08,0x94,0x10,
- 0xF4,0x28,0x04,0x44,0x04,0x40,0x00,0x00,/*"衷",7*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x80,0xFE,0x47,0x02,0x30,0xFA,0x0F,
- 0x02,0x10,0xFE,0x67,0x00,0x00,0x00,0xFF,
- 0x00,0x41,0x00,0x41,0xFF,0x41,0x10,0x41,
- 0x10,0x41,0x10,0xFF,0x10,0x00,0x00,0x00,/*"貼",8*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x10,0x00,0x0C,0x80,0x03,0x00,0x00,
- 0x00,0x00,0xE0,0x3F,0x02,0x40,0x04,0x40,
- 0x18,0x40,0x00,0x40,0x00,0x40,0x00,0x78,
- 0x40,0x00,0x80,0x01,0x00,0x0E,0x00,0x00,/*"心",9*/
- /* (16 X 16 , 宋體 ) */
- 0x10,0x08,0x10,0x04,0x10,0x03,0xD0,0x00,
- 0xFF,0xFF,0x90,0x00,0x10,0x03,0x00,0x00,
- 0xFE,0xFF,0x22,0x42,0x22,0x42,0x22,0x42,
- 0x22,0x42,0xFE,0xFF,0x00,0x00,0x00,0x00,/*"相",10*/
- /* (16 X 16 , 宋體 ) */
- 0x00,0x00,0xFE,0xFF,0x22,0x04,0x5A,0x08,
- 0x86,0x87,0x08,0x41,0x10,0x3F,0x44,0x40,
- 0x24,0x80,0xF4,0xBF,0x2C,0x85,0x27,0x95,
- 0x24,0xA5,0xE4,0x9F,0x04,0x80,0x00,0x00,/*"隨",11*/
- /* (16 X 16 , 宋體 ) */
- };
- /*****函數(shù)聲明*****/
- void display1_ltor(void);
- void display2_ltor(void);
- void display2_rtol(void);
- void display3(void);
- void display4(void);
- /*****n(us)延時子程序*****/
- void DelayUs(uint N)
- {
- uint x;
- for(x=0; x<=N;x++);
- }
- /*****中斷服務(wù)程序*****/
- void intersvr0(void) interrupt 0
- {
- ;
- KY=~KY; //每個搖動來回水銀開關(guān)會在擺幅兩端分別產(chǎn)生下降沿中斷,只提取其中一次(從左向右搖才顯示)
- if(KY==0)
- {
- num++; //計算中斷次數(shù)
- switch(pic) //選擇畫面
- {
- case 0:{display1_ltor();}break;
- case 1:{display2_ltor();}break;
- case 2:{display3();}break;
- case 3:{display4();}break;
- default:{display1_ltor();}
- }
- }
- }
- /*****顯示子程序1*****/
- void display1_ltor(void)
- {
- uchar i;
- if(num>5){disp++;num=0;} //每中斷7次切換
- if(disp>2)disp=0;
- DelayUs(5200); //此處延時時間依各硬件差別而各不相同,試著調(diào)整使得顯示內(nèi)容居中即可
- for(i=0;i<64;i++)
- {
- P0=~hanzi[disp*128+i*2];
- P2=~hanzi[disp*128+i*2+1];
- DelayUs(100);
- }
- }
- /*****顯示子程序2*****/
- void display2_ltor(void)
- {
- uchar i;
- DelayUs(4000);
- for(i=0;i<64;i++)
- {
- P0=~love[i*2];
- P2=~love[i*2+1];
- DelayUs(140);
- }
- }
- /*****顯示子程序3*****/
- void display3(void)
- {
- uchar i;
- DelayUs(4000);
- for(i=0;i<64;i++)
- {
- P0=~loveyou[i*2];
- P2=~loveyou[i*2+1];
- DelayUs(120);
- }
- }
- /*****顯示子程序4*****/
- void display4(void)
- {
- uchar i;
- DelayUs(4000);
- for(i=0;i<64;i++)
- {
- P0=~hehe[i*2];
- P2=~hehe[i*2+1];
- DelayUs(120);
- }
- }
- /*****主函數(shù)*****/
- void main(void)
- {
- IT0=1;
- EX0=1;
- EA=1; //開中斷,下降沿中斷
- KY=0;
- while(1) //主程序中只檢測按鍵
- {
- if(KEY==0) //畫面切換鍵按下
- {
- DelayUs(10000); //按鍵去抖
- if(KEY==0);
- pic++;}
- if(pic>3)pic=0;
- }
- }
- /*****END*****/
復(fù)制代碼
|