📄 dh16摇摇棒.c
字号:
/*********************************************************************************************
敦煌电子 DH Studio
WWW.DHMCU.COM
2013.01.17开始编写
2013.01.18基本完成,只做了三个字幕切换
2013.01.19添加到四个字幕,加程序备注,程序完成
2013.01.24录制DH16配套视频教程,视频在网站公开,如有疑问,敬请关注敦煌电子网站
/*********************************************************************************************/
#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; //向右摇动触发
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 , 宋体, 加粗 ) */
};
/*********************************************************************************************
延时函数
/*********************************************************************************************/
void delay (uint a)
{ // 用于点扫描的延时
unsigned int i;
while( --a != 0)
{
for(i = 0; i < 1; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
毫秒级延时函数
/*********************************************************************************************/
void DELAY_MS (uint a)
{
unsigned int i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
关闭所有显示函数
/**********************************************************************************************/
void DISPLAY_OFF (void)
{
delay(DELAY);//显示停留
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
}
/**********************************************************************************************/
/*********************************************************************************************
单列显示函数
/**********************************************************************************************/
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);//调节字的显示宽扁
}
/*********************************************************************************************
端口工作方式初始化函数
/**********************************************************************************************/
void init (void)
{
P1M0 = 0xff;//强推
P2M0 = 0xff;
P3M0 = 0xe0;
P1 = 0xff; //初始IO接口状态
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;
}
}
}
/**********************************************************************************************/
/*********************************************************************************************
主函数
/**********************************************************************************************/
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
一样的电子,不一样的玩法
/**********************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -