双色点阵显示程序详解

2025-10-27 02:52:05

1、主要利用二极管的动态扫描,根据电路图,分配I/O整理思路

双色点阵显示程序详解

2、#include "reg52.h"//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

双色点阵显示程序详解

3、#define uint unsigned int

#define uchar unsigned char

双色点阵显示程序详解

4、sbit smg=P3^7;

uchar count=0,j=0,a=0;

uchar code saomiao[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; //共阳极

uint code xianshi [18][8]={

{0xff,0xff,0xc1,0xbe,0xbe,0xbe,0xc1,0xff}, //0

{0xff,0xff,0xff,0xff,0xde,0x80,0xfe,0xff}, //1

{0xff,0xff,0xd8,0xba,0xba,0xba,0xc6,0xff}, //2

{0xff,0xff,0xdd,0xb6,0xb6,0xb6,0xc9,0xff}, //3

{0xff,0xff,0xf3,0xeb,0xdb,0x80,0xfb,0xff}, //4

{0xff,0xff,0x8d,0xae,0xae,0xae,0xb1,0xff}, //5

{0xff,0xff,0xc1,0xb6,0xb6,0xb6,0xd9,0xff}, //6

{0xff,0xff,0xbf,0xbf,0xbf,0xb0,0x8f,0xff}, //7

{0xff,0xff,0xc9,0xb6,0xb6,0xb6,0xc9,0xff}, //8

{0xff,0xff,0xcd,0xb6,0xb6,0xb6,0xc1,0xff}, //9

{0xff,0xff,0x80,0xb7,0xb7,0xcf,0xff,0xff}, //P

{0xff,0xff,0x80,0xb7,0xb3,0x8c,0xff,0xff}, //R

{0xff,0xff,0x80,0xb6,0xb6,0xb6,0xff,0xff}, //E

{0xff,0xff,0xc1,0xbe,0xbe,0x9d,0xff,0xff}, //C

{0xff,0xff,0x80,0xf7,0xf7,0x80,0xff,0xff}, //H

{0xff,0xff,0xff,0x00,0x00,0xff,0xff,0xff}, //I

{0xff,0x80,0xef,0xf7,0xfb,0x80,0xff,0xff}, //N

{0x83,0xb7,0xb7,0x00,0xb7,0xb7,0x83,0xff}//中

};

双色点阵显示程序详解

5、/******************************************************************/

/*                    延时函数声明                                */

/******************************************************************/

/*void mdelay(uint t)

{

  uchar n;

for(;t>0;t--)

 for(n=0;n<125;n++)

  {;}

}*/

void mdelay(uint t)

{

uchar n;

while(t--)

{

for(n=0;n<123;n++)

  {;}

  }  

}

双色点阵显示程序详解

6、/******************************************************************/

/*                   主函数                                       */

/******************************************************************/

void main()

uchar i; 

EA=1;//开总中断开关

TH0=0x3c;//设置初值50ms

TL0=0xb0;

ET0=1;//打开定时器中断

TR0=1;//启动定时器

TMOD=0x01;//设置定时器0为工作方式1

  while(1)

{   if(a==1)

 {

for(i=0;i<8;i++)

{

P0=saomiao[i]; //公共端,高电平有效

smg=1; //锁存

smg=0;

P0=0xff;

P0=xianshi[j][i];//数组显示

mdelay(2);

}

      }

      else

      {

for(i=0;i<8;i++)

{

P0=saomiao[i]; //公共端,高电平有效

smg=1; //锁存

smg=0;

P0=0xff;

P2=xianshi[j][i];//数组显示

mdelay(2);

}

      }

  }

}

双色点阵显示程序详解

双色点阵显示程序详解

7、/******************************************************************/

/*                   定时器0                                       */

/******************************************************************/

void time0() interrupt 1

{

  TH0=0x3c;

TL0=0xb0;

count++;

if(count==20)

{

    j++; //间隔1s

a++;

count=0;

if(j==18)

j=0;

if(a==2)

a=0;

  }

}

双色点阵显示程序详解

8、本经验只供参考,如有不足,还请见谅,如果有什么疑问请在下边留言,及时给你解答。。。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢