?? dh16搖搖棒.c
字號:
/*********************************************************************************************
敦煌電子 DH Studio
WWW.DHMCU.COM
2013.01.17開始編寫
2013.01.18基本完成,只做了三個字幕切換
2013.01.19添加到四個字幕,加程序備注,程序完成
2013.01.24錄制DH16配套視頻教程,視頻在網(wǎng)站公開,如有疑問,敬請關(guān)注敦煌電子網(wǎng)站
/*********************************************************************************************/
#include <STC15.H> //單片機頭文件
#define uint unsigned int
#define uchar unsigned char
#define DELAY 5 //掃描延時時間長度
uchar MENU;
uchar a;
sbit S1= P3 ^ 4; //選擇鍵
sbit S2= P3 ^ 3; //向右搖動觸發(fā)
sbit D1= P2 ^ 4; //LED燈定義,低電平時亮(自上到下)
sbit D2= P2 ^ 3;
sbit D3= P2 ^ 2;
sbit D4= P2 ^ 1;
sbit D5= P2 ^ 0;
sbit D6= P3 ^ 7;
sbit D7= P3 ^ 6;
sbit D8= P3 ^ 5;
sbit D9= P1 ^ 5;
sbit D10= P1 ^ 4;
sbit D11= P1 ^ 3;
sbit D12= P1 ^ 2;
sbit D13= P1 ^ 1;
sbit D14= P1 ^ 0;
sbit D15= P2 ^ 7;
sbit D16= P2 ^ 6;
/*********************************************************************************************/
uchar code logo[] =
{
0x04,0x08,0x74,0x09,0x74,0x49,0x55,0xC9,0x57,0xFD,0x56,0x7F,0x74,0x47,0x74,0x45,
0xF4,0x64,0xFF,0x33,0x1F,0x1F,0x12,0x1F,0xF0,0x73,0xF0,0xE0,0x10,0xC0,0x10,0x40,/*"敦",0*/
/* (16 X 16 , 宋體, 加粗 ) */
0x80,0x40,0xE0,0x70,0x60,0x3E,0xFF,0x0F,0xFF,0x07,0x18,0x3C,0x7C,0x3D,0x7C,0x25,
0x56,0x25,0x57,0x3F,0x55,0x3F,0x54,0x25,0x54,0x25,0x7C,0x35,0x7C,0x35,0x00,0x20,/*"煌",1*/
/* (16 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x00,0x00,0xF8,0x0F,0xF8,0x0F,0x48,0x04,0x48,0x04,0x48,0x04,0xFF,0x3F,
0xFF,0x7F,0x48,0x44,0x48,0x44,0x48,0x44,0xF8,0x4F,0xF8,0x4F,0x00,0x70,0x00,0x70,/*"電",2*/
/* (16 X 16 , 宋體, 加粗 ) */
0x00,0x01,0x00,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x41,0x02,0xC1,0xE2,0xFF,
0xF2,0x7F,0x1A,0x01,0x0E,0x01,0x06,0x01,0x02,0x01,0x80,0x01,0x80,0x01,0x00,0x01,/*"子",3*/
/* (16 X 16 , 宋體, 加粗 ) */
};
/*********************************************************************************************/
uchar code logo1[] =
{
0x08,0x20,0xF8,0x3F,0xF8,0x3F,0x08,0x20,0x08,0x20,0x18,0x30,0xF0,0x1F,0xE0,0x0F,/*"D",0*/
/* (8 X 16 , 宋體, 加粗 ) */
0x08,0x20,0xF8,0x3F,0xF8,0x3F,0x08,0x21,0x00,0x01,0x08,0x21,0xF8,0x3F,0xF8,0x3F,/*"H",1*/
/* (8 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",2*/
/* (8 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x70,0x38,0xF8,0x38,0x88,0x21,0x08,0x21,0x08,0x23,0x38,0x3E,0x38,0x1C,/*"S",3*/
/* (8 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0xE0,0x3F,0x80,0x20,0x80,0x20,0x00,0x00,/*"t",4*/
/* (8 X 16 , 宋體, 加粗 ) */
0x80,0x00,0x80,0x1F,0x80,0x3F,0x00,0x20,0x00,0x20,0x80,0x30,0x80,0x3F,0x80,0x3F,/*"u",5*/
/* (8 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x00,0x0E,0x00,0x1F,0x80,0x31,0x80,0x20,0x88,0x30,0xF8,0x3F,0xF8,0x3F,/*"d",6*/
/* (8 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,/*"i",7*/
/* (8 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x00,0x1F,0x80,0x3F,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x3F,0x00,0x1F,/*"o",8*/
/* (8 X 16 , 宋體, 加粗 ) */
};
/*********************************************************************************************/
uchar code logo2[] =
{
0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0xC0,0x00,0x80,0x00,/*"一",0*/
/* (16 X 16 , 宋體, 加粗 ) */
0x08,0x02,0x88,0x03,0xE8,0x01,0xFF,0xFF,0xFF,0xFF,0xC8,0x00,0x88,0x04,0x49,0x04,
0x4F,0x04,0x4E,0x04,0xF8,0xFF,0xFC,0xFF,0x4F,0x04,0x4B,0x04,0x48,0x04,0x08,0x04,/*"樣",1*/
/* (16 X 16 , 宋體, 加粗 ) */
0x00,0x00,0xF8,0x7F,0xFC,0x7F,0x8F,0x10,0x8B,0x10,0xF8,0x3F,0xF8,0x3F,0x70,0x00,
0xBF,0x00,0x8F,0x03,0x08,0x27,0x08,0x66,0x08,0x60,0xF8,0x3F,0xF8,0x1F,0x00,0x00,/*"的",2*/
/* (16 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x00,0x00,0xF8,0x0F,0xF8,0x0F,0x48,0x04,0x48,0x04,0x48,0x04,0xFF,0x3F,
0xFF,0x7F,0x48,0x44,0x48,0x44,0x48,0x44,0xF8,0x4F,0xF8,0x4F,0x00,0x70,0x00,0x70,/*"電",3*/
/* (16 X 16 , 宋體, 加粗 ) */
0x00,0x01,0x00,0x01,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x41,0x02,0xC1,0xE2,0xFF,
0xF2,0x7F,0x1A,0x01,0x0E,0x01,0x06,0x01,0x02,0x01,0x80,0x01,0x80,0x01,0x00,0x01,/*"子",4*/
/* (16 X 16 , 宋體, 加粗 ) */
};
/*********************************************************************************************/
uchar code logo3[] =
{
0x00,0x00,0x02,0x08,0x02,0x0C,0x02,0x06,0x02,0x03,0x82,0x01,0xC2,0x00,0xFE,0x7F,
0xFE,0x7F,0x46,0x00,0xC2,0x00,0xC2,0x01,0x82,0x07,0x03,0x07,0x03,0x02,0x02,0x00,/*"不",0*/
/* (16 X 16 , 宋體, 加粗 ) */
0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0xC0,0x00,0x80,0x00,/*"一",1*/
/* (16 X 16 , 宋體, 加粗 ) */
0x08,0x02,0x88,0x03,0xE8,0x01,0xFF,0xFF,0xFF,0xFF,0xC8,0x00,0x88,0x04,0x49,0x04,
0x4F,0x04,0x4E,0x04,0xF8,0xFF,0xFC,0xFF,0x4F,0x04,0x4B,0x04,0x48,0x04,0x08,0x04,/*"樣",2*/
/* (16 X 16 , 宋體, 加粗 ) */
0x00,0x00,0xF8,0x7F,0xFC,0x7F,0x8F,0x10,0x8B,0x10,0xF8,0x3F,0xF8,0x3F,0x70,0x00,
0xBF,0x00,0x8F,0x03,0x08,0x27,0x08,0x66,0x08,0x60,0xF8,0x3F,0xF8,0x1F,0x00,0x00,/*"的",3*/
/* (16 X 16 , 宋體, 加粗 ) */
0x42,0x08,0x42,0x08,0xFE,0x0F,0xFE,0x87,0x42,0xC4,0x42,0x64,0x20,0x30,0x22,0x1C,
0xE2,0x0F,0xE2,0x03,0x22,0x00,0xE2,0x3F,0xE2,0x7F,0x22,0x40,0x20,0x70,0x20,0x70,/*"玩",4*/
/* (16 X 16 , 宋體, 加粗 ) */
0x10,0x04,0x70,0x04,0x61,0xFE,0xC7,0xFF,0xF6,0x01,0x30,0x41,0x10,0x61,0x10,0x71,
0x10,0x5D,0xFF,0x4F,0xFF,0x43,0x10,0x41,0x10,0x51,0x10,0xF1,0x10,0xE1,0x00,0x01,/*"法",5*/
/* (16 X 16 , 宋體, 加粗 ) */
};
/*********************************************************************************************
延時函數(shù)
/*********************************************************************************************/
void delay (uint a)
{ // 用于點掃描的延時
unsigned int i;
while( --a != 0)
{
for(i = 0; i < 1; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
毫秒級延時函數(shù)
/*********************************************************************************************/
void DELAY_MS (uint a)
{
unsigned int i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
關(guān)閉所有顯示函數(shù)
/**********************************************************************************************/
void DISPLAY_OFF (void)
{
delay(DELAY);//顯示停留
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
}
/**********************************************************************************************/
/*********************************************************************************************
單列顯示函數(shù)
/**********************************************************************************************/
void DISPLAY_PIN (uchar d,uchar e)
{
uchar i;
i = d & 0x01;
if(i == 0x01){D16 = 0;}DISPLAY_OFF();
i = d & 0x02;
if(i == 0x02){D15 = 0;}DISPLAY_OFF();
i = d & 0x04;
if(i == 0x04){D14 = 0;}DISPLAY_OFF();
i = d & 0x08;
if(i == 0x08){D13 = 0;}DISPLAY_OFF();
i = d & 0x10;
if(i == 0x10){D12 = 0;}DISPLAY_OFF();
i = d & 0x20;
if(i == 0x20){D11 = 0;}DISPLAY_OFF();
i = d & 0x40;
if(i == 0x40){D10 = 0;}DISPLAY_OFF();
i = d & 0x80;
if(i == 0x80){D9 = 0;}DISPLAY_OFF();
i = e & 0x01;
if(i == 0x01){D8 = 0;}DISPLAY_OFF();
i = e & 0x02;
if(i == 0x02){D7 = 0;}DISPLAY_OFF();
i = e & 0x04;
if(i == 0x04){D6 = 0;}DISPLAY_OFF();
i = e & 0x08;
if(i == 0x08){D5 = 0;}DISPLAY_OFF();
i = e & 0x10;
if(i == 0x10){D4 = 0;}DISPLAY_OFF();
i = e & 0x20;
if(i == 0x20){D3 = 0;}DISPLAY_OFF();
i = e & 0x40;
if(i == 0x40){D2 = 0;}DISPLAY_OFF();
i = e & 0x80;
if(i == 0x80){D1 = 0;}DISPLAY_OFF();
delay(50);//調(diào)節(jié)字的顯示寬扁
}
/*********************************************************************************************
端口工作方式初始化函數(shù)
/**********************************************************************************************/
void init (void)
{
P1M0 = 0xff;//強推
P2M0 = 0xff;
P3M0 = 0xe0;
P1 = 0xff; //初始IO接口狀態(tài)
P2 = 0xff;
P3 = 0xff;
}
/*********************************************************************************************
第一幕
/**********************************************************************************************/
void display1()
{
if(S2==0)
{
DELAY_MS(40);
while(S2==0);
for(a=0;a<64;a++)//第一幕有四個漢字,用16*4=64 ,一個漢字是16列
{
DISPLAY_PIN (logo[a*2],logo[a*2+1]);
}
}
}
/*********************************************************************************************
第二幕
/**********************************************************************************************/
void display2()
{
if(S2==0)
{
DELAY_MS(40);
while(S2==0);
for(a=0;a<72;a++)//第二幕有8個字母和一個空格,用8*9=72,一個字母是8列
{
DISPLAY_PIN (logo1[a*2],logo1[a*2+1]);
}
}
}
/*********************************************************************************************
第三幕
/**********************************************************************************************/
void display3()
{
if(S2==0)
{
DELAY_MS(40);
while(S2==0);
for(a=0;a<80;a++)//第一幕有5個漢字,用16*5=80 ,一個漢字是16列
{
DISPLAY_PIN (logo2[a*2],logo2[a*2+1]);
}
}
}
/*********************************************************************************************
第四幕
/**********************************************************************************************/
void display4()
{
if(S2==0)
{
DELAY_MS(40);
while(S2==0);
for(a=0;a<96;a++)//第一幕有6個漢字,用16*6=96 ,一個漢字是16列
{
DISPLAY_PIN (logo3[a*2],logo3[a*2+1]);
}
}
}
/*********************************************************************************************
按鍵選擇
/**********************************************************************************************/
void key()
{
if(S1==0)
{
DELAY_MS(26);
if(S1==0)
{
while(!S1);
MENU++;
if(MENU>3)
MENU=0;
}
}
}
/**********************************************************************************************/
/*********************************************************************************************
主函數(shù)
/**********************************************************************************************/
void main (void)
{
init();//初始程序
while(1)
{
switch(MENU)
{
case 0:display1();key();break;
case 1:display2();key();break;
case 2:display3();key();break;
case 3:display4();key();break;
default:display1();break;
}
}
}
/**********************************************************************************************
/**********************************************************************************************/
/**********************************************************************************************
敦煌電子 DH Studio
WWW.DHMCU.COM
一樣的電子,不一樣的玩法
/**********************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -