晃动屏(程序分析)

来源:百度文库 编辑:神马文学网 时间:2024/04/30 15:33:52
//本文件为5×8点阵西文字库文件,字的纵向8点构成一字节
//上方的点在字节的高位,字符点阵按左→右取字
unsigned char code ASCII_Dot[480] = {
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFA,0x00,0x00,
0x00,0xE0,0x00,0xE0,0x00,
0x28,0xFE,0x28,0xFE,0x28,
0x24,0x74,0xDE,0x54,0x48,
0xC4,0xC8,0x10,0x26,0x46,
0x6C,0x92,0x6A,0x04,0x0A,
0x00,0x20,0xC0,0x80,0x00,
0x00,0x38,0x44,0x82,0x00,
0x00,0x82,0x44,0x38,0x00,
0x44,0x28,0xFE,0x28,0x44,
0x10,0x10,0xFE,0x10,0x10,
0x02,0x0C,0x08,0x00,0x00,
0x10,0x10,0x10,0x10,0x10,
0x00,0x06,0x06,0x00,0x00,
0x04,0x08,0x10,0x20,0x40,
0x7C,0x8A,0x92,0xA2,0x7C,
0x00,0x42,0xFE,0x02,0x00,
0x46,0x8A,0x92,0x92,0x62,
0x84,0x82,0x92,0xB2,0xCC,
0x18,0x28,0x48,0xFE,0x08,
0xE4,0xA2,0xA2,0xA2,0x9C,
0x3C,0x52,0x92,0x92,0x8C,
0x80,0x8E,0x90,0xA0,0xC0,
0x6C,0x92,0x92,0x92,0x6C,
0x62,0x92,0x92,0x94,0x78,
0x00,0x6C,0x6C,0x00,0x00,
0x02,0x6C,0x6C,0x00,0x00,
0x10,0x28,0x44,0x82,0x00,
0x28,0x28,0x28,0x28,0x28,
0x00,0x82,0x44,0x28,0x10,
0x40,0x80,0x9A,0xA0,0x40,
0x7C,0x82,0xBA,0xAA,0x7A,
0x3E,0x48,0x88,0x48,0x3E,
0xFE,0x92,0x92,0x92,0x6C,
0x7C,0x82,0x82,0x82,0x44,
0xFE,0x82,0x82,0x82,0x7C,
0xFE,0x92,0x92,0x92,0x82,
0xFE,0x90,0x90,0x90,0x80,
0x7C,0x82,0x8A,0x8A,0x4E,
0xFE,0x10,0x10,0x10,0xFE,
0x00,0x82,0xFE,0x82,0x00,
0x04,0x02,0x82,0xFC,0x80,
0xFE,0x10,0x28,0x44,0x82,
0xFE,0x02,0x02,0x02,0x02,
0xFE,0x40,0x30,0x40,0xFE,
0xFE,0x20,0x10,0x08,0xFE,
0x7C,0x82,0x82,0x82,0x7C,
0xFE,0x90,0x90,0x90,0x60,
0x7C,0x82,0x8A,0x84,0x7A,
0xFE,0x90,0x98,0x94,0x62,
0x64,0x92,0x92,0x92,0x4C,
0x80,0x80,0xFE,0x80,0x80,
0xFC,0x02,0x02,0x02,0xFC,
0xF8,0x04,0x02,0x04,0xF8,
0xFE,0x04,0x18,0x04,0xFE,
0xC6,0x28,0x10,0x28,0xC6,
0xC0,0x20,0x1E,0x20,0xC0,
0x86,0x8A,0x92,0xA2,0xC2,
0xFE,0xFE,0x82,0x82,0x00,
0x40,0x20,0x10,0x08,0x04,
0x00,0x82,0x82,0xFE,0xFE,
0x20,0x40,0xFE,0x40,0x20,
0x10,0x38,0x54,0x10,0x10,
0x00,0x00,0x80,0x40,0x20,
0x24,0x2A,0x2A,0x1C,0x02,
0xFE,0x14,0x22,0x22,0x1C,
0x1C,0x22,0x22,0x22,0x10,
0x1C,0x22,0x22,0x14,0xFE,
0x1C,0x2A,0x2A,0x2A,0x10,
0x10,0x7E,0x90,0x90,0x40,
0x32,0x4A,0x4A,0x4A,0x3C,
0xFE,0x10,0x20,0x20,0x1E,
0x00,0x00,0x9E,0x00,0x00,
0x00,0x01,0x11,0x9E,0x00,
0xFE,0x08,0x14,0x22,0x02,
0x00,0x82,0xFE,0x02,0x00,
0x1E,0x20,0x1E,0x20,0x1E,
0x20,0x1E,0x20,0x20,0x1E,
0x1C,0x22,0x22,0x22,0x1C,
0x3F,0x24,0x24,0x24,0x18,
0x18,0x24,0x24,0x24,0x3F,
0x20,0x1E,0x20,0x20,0x10,
0x12,0x2A,0x2A,0x2A,0x24,
0x20,0xFC,0x22,0x22,0x24,
0x3C,0x02,0x02,0x3C,0x02,
0x38,0x04,0x02,0x04,0x38,
0x3C,0x02,0x3C,0x02,0x3C,
0x22,0x14,0x08,0x14,0x22,
0x39,0x05,0x05,0x09,0x3E,
0x22,0x26,0x2A,0x32,0x22,
0x10,0x6C,0x82,0x00,0x00,
0x00,0x00,0xEE,0x00,0x00,
0x00,0x00,0x82,0x6C,0x10,
0x10,0x20,0x10,0x08,0x10,
0xAA,0x54,0xAA,0x54,0xAA
};
#include
#include <5x8_ascii_dot.c>
#define BYTE unsigned char
#define WORD unsigned int
sbit KEY1 = P0^7;
sbit KEY2 = P1^7;
sbit KEY3 = P2^0;
#define G_Port P0
#define R_Port P1
BYTE str1[8]={"LAO KU  "};
BYTE color;
void PORT_Init (void);
void Reset_Sources_Init();
Delay_ms(WORD ms);
void main (void)
{
OSCICN    = 0x81;           // 初始化系统时钟
PCA0MD &= ~0x40;                    // 禁止WDT
PORT_Init ();                       // 端口初始化
Reset_Sources_Init();               // 复位源初始化
TCON=0x01;
IE        = 0x81;
IT01CF    = 0x07;
color=1;
while(1)////////////////////////////////////////主程序完成颜色的跳换
{
if(!KEY2)    // 判断是否有键按下
{
Delay_ms(100);       // 延时消抖动
if(!KEY2)
{
while(!KEY2){};  // 等待键放开
color++;              // 改变颜色
if(color>3){color=1;}
R_Port=G_Port=0xFF;
switch(color)  // 确定颜色
{
case 1: R_Port=0x80; break; // 红
case 2: G_Port=0x80; break; // 绿
case 3: R_Port=G_Port=0x80; break; // 红+绿=黄
default:break;
}
}
}
}
}
//----------------------------
// 外部中断0程序
//----------------------------
void INT0_ISR (void) interrupt 0
{
BYTE i,j,outbuf;
WORD dot;
R_Port=0xFF;
G_Port=0xFF;
Delay_ms(450);
for(i=0;i<8;i++)//////////////////////////////////一共显示的字母
{
dot=(str1[i]-0x20)*5; // 计算字符在点阵中的首地址   BYTE str1[8]={"LAO KU  "};
for(j=0;j<5;j++)
{                // 一个字符5列 5*8表示一个字母
outbuf=~(ASCII_Dot[dot+j]>>1);
switch(color)  // 确定颜色
{
case 1: R_Port=outbuf; break; // 红
case 2: G_Port=outbuf; break; // 绿
case 3: R_Port=G_Port=outbuf; break; // 红+绿=黄
default:break;
}
Delay_ms(15);
R_Port=G_Port=0xFF;
Delay_ms(5);
}
Delay_ms(15);
}
IE0=0;
}
Delay_ms(WORD ms)
void PORT_Init (void)
{
XBR1   = 0x40;   // 交叉开关打开
P0MDOUT   = 0x7F;
P1MDOUT   = 0x7F;
P0SKIP  = 0x0B;
}
void Reset_Sources_Init()
{
WORD i;
i = 0;
VDM0CN    = 0x80;  // 允许内部电压监视器
for (i = 0; i < 350; i++);  // 延时等待电压监视器稳定
RSTSRC    = 0x06;  //  允许电压监视器复位、时钟丢失复位
}
文章引用自: