分享

晃动屏(程序分析)

 弓道自然_改名 2007-11-22
 //本文件为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 <c8051f330.h>
#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;  //  允许电压监视器复位、时钟丢失复位
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多