双色点阵显示程序详解
来源:网络收集 点击: 时间:2024-04-30主要利用二极管的动态扫描,根据电路图,分配I/O整理思路

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

#define uint unsigned int
#define uchar unsigned char

sbit smg=P3^7;
uchar count=0,j=0,a=0;
uchar code saomiao={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; //共阳极
uint code xianshi ={
{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}//中
};

/******************************************************************/
/* 延时函数声明 */
/******************************************************************/
/*void mdelay(uint t)
{
uchar n;
for(;t0;t--)
for(n=0;n125;n++)
{;}
}*/
void mdelay(uint t)
{
uchar n;
while(t--)
{
for(n=0;n123;n++)
{;}
}
}

/******************************************************************/
/* 主函数 */
/******************************************************************/
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;i8;i++)
{
P0=saomiao;//公共端,高电平有效
smg=1; //锁存
smg=0;
P0=0xff;
P0=xianshi;//数组显示
mdelay(2);
}
}
else
{
for(i=0;i8;i++)
{
P0=saomiao;//公共端,高电平有效
smg=1; //锁存
smg=0;
P0=0xff;
P2=xianshi;//数组显示
mdelay(2);
}
}
}
}


/******************************************************************/
/* 定时器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;
}
}

本经验只供参考,如有不足,还请见谅,如果有什么疑问请在下边留言,及时给你解答。。。
注意事项电脑
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_634767.html