双色点阵动态显示

 
  
/*-----------------------------------------------
  名称:双色点阵
  内容:锁存器输入公共端信号,红绿信号分别是P0口、P2口控制,锁存输入端由P0口控制,锁存端接P3.7,由J6跳帽控制
例如:
   dofly_WeiMa:00000001  0x01dofly_DuanMa:11111111   0xff    // 心形图像 
                00000010   0x02    10010011   0x93
     00000100  0x04    011011010x6d
00001000  0x08    01111101   0x7d
00010000  0x10    101110110xbb
00100000  0x20    110101110xd7
01000000  0x40    111011110xef
10000000  0x80    111111110xff
------------------------------------------------*/
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define uint  unsigned int
static unsigned int count,i,j,x;
 
sbit LE=P3^7;//定义锁存使能端口 




unsigned char code dofly_WeiMa[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
// 输出到公共端
unsigned char code dofly_DuanMa[19][8]={  
                                     {0xff,0x93,0x6d,0x7d,0xbb,0xd7,0xef,0xff},  //心形图像,低电平有效
  {0xE7,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xE7},  //0
  {0xEF,0xE7,0xEF,0xEF,0xEF,0xEF,0xC7,0xFF},  //1                                         //1
  {0xE7,0xDB,0xDF,0xEF,0xF7,0xFB,0xC3,0xFF},  //2
  {0xE7,0xDB,0xDF,0xE7,0xDF,0xDB,0xE7,0xFF},  //3
  {0xEF,0xE7,0xEB,0xED,0x81,0xEF,0xEF,0xEF},  //4
  {0xC3,0xFB,0xFB,0xE3,0xDF,0xDF,0xE3,0xFF},  //5
  {0xE7,0xDB,0xFB,0xE3,0xDB,0xDB,0xDB,0xE7},  //6    
  {0xC3,0xDB,0xDF,0xEF,0xF7,0xF7,0xF7,0xFF},  //7                                         //1
  {0xE7,0xDB,0xDB,0xE7,0xDB,0xDB,0xE7,0xFF},  //8
  {0xE7,0xDB,0xDB,0xC7,0xDF,0xDB,0xE7,0xFF},  //9
  {0xE7,0xDB,0xBD,0xBD,0x81,0xBD,0xBD,0xBD},  //A
  {0xE3,0xDB,0xDB,0xE3,0xDB,0xDB,0xDB,0xE3},  //B
  {0xC3,0xBD,0xFD,0xFD,0xFD,0xFD,0xBD,0xC3},  //C
  {0xE1,0xDD,0xBD,0xBD,0xBD,0xBD,0xDD,0xE1},  //D                                         //1
  {0x81,0xFD,0xFD,0x81,0x81,0xFD,0xFD,0x81},  //E
  {0x81,0xFD,0xFD,0x81,0x81,0xFD,0xFD,0xFD},  //F
  {0xC3,0xBD,0x5A,0x24,0x7E,0x5A,0xA5,0xC3},  //笑脸
  {0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},  //红心
 };


/*------------------------------------------------
                    函数声明
------------------------------------------------*/
void Delay(unsigned int i)//延时函数
{
 while(i--);
}


/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{ 
for(x=0;x<19;x++)  //显示0————红心,一共19行
{  
for(j=0;j<20;j++) //用于决定绿色图像显示的时长
    for(i=0;i<8;i++)
  {
  P0=dofly_WeiMa[i]; //公共端信号,高电平有效,扫描行
     LE=1;                 //锁存
     LE=0;
  P0=0xff;
  P0=dofly_DuanMa[x][i];//红颜色控制端信号,显示这一行的数据
  Delay(300);               //扫描间隙延时,时间太长会闪烁,太短会造成重影
 }
 
  
        for(j=0;j<20;j++)        //用于决定绿色图像显示的时长  
   for(i=0;i<8;i++)
 {
  P0=dofly_WeiMa[i]; //公共端信号,高电平有效 ,扫描行
       LE=1;                 //锁存
       LE=0;
  P0=0xff;            //红色端置1,防止点亮红
       P2=dofly_DuanMa[x][i]; //绿颜色控制端信号 ,显示这一行的数据
  Delay(300);               //扫描间隙延时,时间太长会闪烁,太短会造成重影
  P2=0xff; 
   
      }
   }
while(1)
{
   for(j=0;j<10;j++)  //用于决定红色图像显示的时长
      { 
    for(i=0;i<8;i++)
  {
  P0=dofly_WeiMa[i]; //公共端信号,高电平有效,扫描行
     LE=1;                 //锁存
     LE=0;
  P0=0xff;
  P0=dofly_DuanMa[18][i];//红颜色控制端信号,显示这一行的数据
  Delay(300);               //扫描间隙延时,时间太长会闪烁,太短会造成重影
 }
}
  
        for(j=0;j<10;j++)//用于决定绿色图像显示的时长
      { 
   for(i=0;i<8;i++)
 {
  P0=dofly_WeiMa[i]; //公共端信号,高电平有效 ,扫描行
       LE=1;                 //锁存
       LE=0;
  P0=0xff;            //红色端置1,防止点亮红
       P2=dofly_DuanMa[18][i]; //绿颜色控制端信号 ,显示这一行的数据
  Delay(300);               //扫描间隙延时,时间太长会闪烁,太短会造成重影
  P2=0xff;
     }
 }  
   
  }  
     
}


 

 
  

 
  
 
  
 
  
 
  
 
 

你可能感兴趣的:(单片机笔记)