51单片机程序设计:[9]88点阵左移显示箭头
1、根据取模软件取模,
uchar code TAB[]={0xFF,0xF7,0xFB,0x81,0xFB,0xF7,0xFF,0xFF};
根据电路图的不同,适当修改程序哦!代码特趴仗当前的硬件连接图图下图:
![51单片机程序设计:[9]88点阵左移显示箭头](https://exp-picture.cdn.bcebos.com/589f5b07880138708344873f2d08a50f94fc8358.jpg)
2、程序思想: 左移显示---如果将扫描方式改为列扫描,那么左右移动的程序就容易写了,但当点阵比较巨大并且硬件已经定下时,改变扫描方式不是好方法,甚至不可能实现。这里是以行扫描为例(逐行取字模),第一次取字码数组中的第1~8个数据到点阵列输入端,行码 扫描1~8行。第二次将第一次的 1~8个数据都循环左(右)移一位,并且将第9个数据的最高位移到第二次数据的最低处,再输轿矿入到列端口,行扫描1~8行。即每次扫描都要把前一次扫描的列码左移一位。
直接贴代码,显示的格式有点乱,先给个图片的代码,下个步骤给出源代码:
![51单片机程序设计:[9]88点阵左移显示箭头](https://exp-picture.cdn.bcebos.com/c6b994775ddd884c844f92946cef28066b01f658.jpg)
3、源代码:
#include<reg52.h>#include "51hei.H"#define uchar unsigned char#define uint unsigned intuchar code TAB[]={0xFF,0xF7,0xFB,0x81,0xFB,0xF7,0xFF,0xFF};uchar i,t,j=0;delay(uchar t){ while (t--) { ; }}void main(void){ uchar T,Y,Q,d; P2=0x75; while (1) { for (Q=0;Q<8;Q++) for (T=0;T<50;T++) //速度 { d=0x01; out164(d); for (i=0;i<8;i++) { Y=TAB[i+1]*256+TAB[i]; 墨游Y=Y<<(7-Q)|Y>>Q; P0=Y%256; delay(60); d=d<<1|d>>7; P0=0xff; // 消隐,很重要,不加要红一片 out164(d); } } }}
![51单片机程序设计:[9]88点阵左移显示箭头](https://exp-picture.cdn.bcebos.com/e6ae36066b0192dd54450b401a87031c99c0f058.jpg)
![51单片机程序设计:[9]88点阵左移显示箭头](https://exp-picture.cdn.bcebos.com/9881b1fce186242fc77729ac35e434daf05ee858.jpg)