电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

完整word版-单片机点亮8X8点阵

完整word版-单片机点亮8X8点阵_第1页
1/3
完整word版-单片机点亮8X8点阵_第2页
2/3
完整word版-单片机点亮8X8点阵_第3页
3/3
首先应该清楚点阵的显示原理,先拿 8X8 的点阵举例说明如下:点阵可以看成是由 8 行 8 列的导线交叉排列,在每一个交叉点上放上二极管,这是一个三行三列的示意图。例如我们想点亮中间的一个二极管,只需要让第二行给高电平,第二列给低电平就能点亮了。8X8 的点阵点亮方式也是一样。用这样的方式可以点亮一个 8X8 点阵上的任意一点,那么,如何让一个 8X8 的点阵显示图像呢?我们拿一个箭头示例。这样的话,我们只需要分别算出各行各列上需要点亮的点的数据就可以了,因为要完成整个屏的显示要打开到每一行每一列,所以我们可以让单片机一个数据口端只做行扫描或列扫描(比方说在所有点的阳极做扫描,也就是从第一行依次打开(若是阳极则给高电平)到第 8 行或第一列依次打开到第八列,在打开其中任意一行或一列时其他行或列给高电平或低电平使其关闭显示),这里只说行扫描,从打开第一列 0x01,第二列 0x02,第三列 0x04······第八列 0x80,可以组成数组 code unsigned char tabh[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};然后则是在这些扫描的基础上需要点亮那些点,因为这里是做阳极列扫描,所以要想点亮某些点则需要在这个点所对应的行控制端给低电平。在 点 亮 第 一 列 , 也 就 是 这 个 箭 头 的 最 上 最 左 边 两 个 点 , 二 进 制 数 据 是11100111,换算成十六进制是 0xe7,然后是第二行的四个点 11000011,换算成十六进制是 0xc3,依次到第八行,装进数组则是 code unsigned char tabh[]={0xe7,0xc3,0x81,0x24,0x66,0xe7,0xe7,0xe7};然后我们在这两组数据的基础上用一个 for 循环让这些列数据与行数据同步对应到单片机数据输出口,再加上短暂的延时(因为要动态扫描 8 行 8 列加上延时是为了产生视觉停留效果让人眼看起来动态扫描后就是一副完整的图像)。程序如下:while(1){unsigned char i;for(i=0;i<8;i++){P0=tabl[i];P2=tabh[i];delay(3);}}完整程序如下:#include //头文件code unsigned char tabl[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, //列数组};code unsigned char tabh[8]={0xe7,0xc3,0x81,0x24,0x66,0xe7,0xe7,0xe7 //行数组};void delay(unsigned int z) //延时程序{unsigned int x,y;for(x=z;x>0;x--)for(y=255;y>0;y--);}void main()//主函数{while(1)//while(1)死循环,一直执行 while(1)范围内的程序{unsigned char i;//定义无符号 char 型变量 ifor(i=0;i<8;i++)//for 循环,i<8 则循环 0——7 次{P0=tabl[i];//因为在循环内 i 是从 0 到 8 做自加运算,所以利用 for 循环里的 i 变量做数组的数据选择P2=tabh[i];delay(3);//短暂延时,视觉停留效果}}}

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

完整word版-单片机点亮8X8点阵

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部