/*--------16*48点阵屏的移动显示------------*/

/*--------16*48点阵屏的移动显示------------*/

/*--------16*48点阵屏的移动显示------------*/

/*--------16*48点阵屏的移动显示------------*/

/*--------16*48点阵屏的移动显示------------*/

#include < reg51.h>

#include < intrins.h>

typedef unsigned char uchar

typedef unsigned int uint

#define DATE_OUT P1                //指定P1口做为输出

sbit DATA=DATE_OUT^0;                //列数据输出位

sbit LCLK=DATE_OUT^1;                //列扫描时钟位

sbit LAT=DATE_OUT^2;                //列数据锁存位

sbit AB  =DATE_OUT^3;                //行数据输出位

sbit HCLK =DATE_OUT^4;                //行扫描时钟位

uchar DatCnt = 0;

idata unsigned char TempDat[6][16]={

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第1个部分的,即第1个8列*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第2个部分的,即第2个8列*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第3个部分的,即第3个8列*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第4个部分的,即第4个8列*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",0第5个部分的,即第5个8列*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",1第6个部分的,即第6个8列*/

};//缓存数据

//非常好用的字摸软件PCtoLCD2002完美版   字模选项:阳码、行列式、顺向

code unsigned char DisplayDat[][16]={

{0xFD,0xFD,0xFD,0xFC,0xC1,0xDD,0xDC,0xD1,0xDD,0xDC,0xC1,0xFD,0xFD,0xFE,0xFF,0xFF},

{0xFF,0xFF,0xFF,0x1F,0xDF,0xDF,0x5F,0xDF,0xDF,0x1F,0xFF,0xFB,0xFB,0x03,0xFF,0xFF},/*"电",6*/

{0xFF,0xFE,0xE1,0xFF,0xFD,0xFE,0xFE,0x80,0xFE,0xFE,0xFE,0xFE,0xF6,0xFA,0xFD,0xFF},

{0xFF,0x0F,0xDF,0xBF,0x7F,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*"子",7*/

{0xFF,0xFF,0xFF,0xE0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x81,0xFF,0xFF,0xFF},

{0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0xFF},/*"工",8*/

{0xFF,0xF9,0xC7,0xF7,0xF1,0x87,0xF3,0xE4,0xD7,0xB7,0x76,0xF7,0xF7,0xF4,0xF7,0xFF},

{0xFF,0xCF,0x2F,0x6F,0x4F,0x3F,0xC7,0x3F,0xBF,0x87,0x3F,0xBF,0x83,0x7F,0xFF,0xFF},/*"程",9*/

{0xFF,0xFE,0xE1,0xFD,0xFB,0xF0,0xFD,0xFB,0xF7,0xE0,0xFA,0xF6,0xEE,0xDC,0xFE,0xFF},

{0x9F,0x7F,0xFF,0xBF,0x7F,0xFF,0xBF,0xDF,0x0F,0xEF,0xFF,0x9F,0xE7,0xF7,0xFF,0xFF},/*"系",10*/

{0xFD,0xFD,0xFD,0xFC,0xC1,0xDD,0xDC,0xD1,0xDD,0xDC,0xC1,0xFD,0xFD,0xFE,0xFF,0xFF},

{0xFF,0xFF,0xFF,0x1F,0xDF,0xDF,0x5F,0xDF,0xDF,0x1F,0xFF,0xFB,0xFB,0x03,0xFF,0xFF},/*"电",6*/

{0xFF,0xFE,0xE1,0xFF,0xFD,0xFE,0xFE,0x80,0xFE,0xFE,0xFE,0xFE,0xF6,0xFA,0xFD,0xFF},

{0xFF,0x0F,0xDF,0xBF,0x7F,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*"子",7*/

{0xFF,0xFF,0xFF,0xE0,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x81,0xFF,0xFF,0xFF},

{0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0xFF},/*"工",8*/

{0xFF,0xF9,0xC7,0xF7,0xF1,0x87,0xF3,0xE4,0xD7,0xB7,0x76,0xF7,0xF7,0xF4,0xF7,0xFF},

{0xFF,0xCF,0x2F,0x6F,0x4F,0x3F,0xC7,0x3F,0xBF,0x87,0x3F,0xBF,0x83,0x7F,0xFF,0xFF},/*"程",9*/

{0xFF,0xFE,0xE1,0xFD,0xFB,0xF0,0xFD,0xFB,0xF7,0xE0,0xFA,0xF6,0xEE,0xDC,0xFE,0xFF},

{0x9F,0x7F,0xFF,0xBF,0x7F,0xFF,0xBF,0xDF,0x0F,0xEF,0xFF,0x9F,0xE7,0xF7,0xFF,0xFF},/*"系",10*/

{0xFD,0xFD,0xFD,0xFC,0xC1,0xDD,0xDC,0xD1,0xDD,0xDC,0xC1,0xFD,0xFD,0xFE,0xFF,0xFF},

{0xFF,0xFF,0xFF,0x1F,0xDF,0xDF,0x5F,0xDF,0xDF,0x1F,0xFF,0xFB,0xFB,0x03,0xFF,0xFF},/*"电",11*/

{0xF7,0xF7,0xF7,0xEF,0xE8,0xCF,0xAC,0x6F,0xEC,0xEF,0xEC,0xED,0xED,0xEC,0xED,0xFF},

{0x7F,0xBF,0xFF,0x83,0x7F,0x8F,0x7F,0x8F,0x7F,0x8F,0x6F,0xEF,0x8F,0x7F,0xFF,0xFF},/*"信",12*/

{0xFF,0xFF,0xFF,0xEF,0xCF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE7,0xFF,0xFF,0xFF},/*"1",13*/

{0xFF,0xFF,0xFF,0xE3,0xDB,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF,0xFF},/*"0",14*/

{0xFF,0xFF,0xFF,0xE3,0xDB,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF,0xFF},/*"0",15*/

{0xFF,0xFF,0xFF,0xEF,0xCF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE7,0xFF,0xFF,0xFF},/*"1",16*/

{0xFE,0xFE,0xF2,0x8E,0xEE,0xEA,0xE2,0xCA,0xEA,0xEE,0xE9,0xE5,0x9B,0xFA,0xF7,0xFF},

{0xFF,0xFF,0xE3,0x1F,0xDF,0xDF,0xC7,0x9F,0xDF,0xDF,0xDF,0xDF,0xC1,0x3F,0xFF,0xFF},/*"班",17*/

{0xFF,0xFF,0xFD,0xFB,0xFB,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFB,0xFB,0xFD,0xFE,0xFF},/*"(",0*/

{0xFF,0xF8,0xF7,0xEF,0xDF,0xBF,0xBF,0xBE,0xBE,0xBF,0xBF,0xDF,0xEF,0xF7,0xF8,0xFF},

{0xFF,0x1F,0xEF,0xF7,0xFB,0xFD,0xFD,0x7D,0x7D,0xFD,0xFD,0xFB,0xF7,0xEF,0x1F,0xFF},/*"⊙",1*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFF},/*"_",2*/

{0xFF,0xF8,0xF7,0xEF,0xDF,0xBF,0xBF,0xBE,0xBE,0xBF,0xBF,0xDF,0xEF,0xF7,0xF8,0xFF},

{0xFF,0x1F,0xEF,0xF7,0xFB,0xFD,0xFD,0x7D,0x7D,0xFD,0xFD,0xFB,0xF7,0xEF,0x1F,0xFF},/*"⊙",3*/

{0xFF,0xFF,0xBF,0xDF,0xDF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xDF,0xBF,0x7F,0xFF},/*")",4*/

{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},/*" ",5*/

};

/*下面函数扫描模式:点阵屏为16*48,我分成了6个16*8的,为了简便我采用

16进制写,6个16*8的如下排列

1                2                3                4                5                6

0xff        0xfe        0xfb        0xfc        0xfe        0x55        第1行        这些数据都是我随便写的,做个假设

0xff        0xfe        0xfb        0xfc        0xfe        0x55        第2行

0xff        0xfe        0xfb        0xfc        0xfe        0x55        第3行

0xff        0xfe        0xfb        0xfc        0xfe        0x55        第4行

...                ...                ...                ...                ...                ...                ...

...                ...                ...                ...                ...                ...                ...

0xff        0xfe        0xfb        0xfc        0xfe        0x55        第15行

0xff        0xfe        0xfb        0xfc        0xfe        0x55        第16行

*/

void Display(uchar flag)

{

unsigned char i,j,temp,x;                //定义变量

DATE_OUT = 0XFF;                                        //置位高电平做准备

AB=0;                                                        //将列数据位清0,准备移位,行为低电平有效

for(i=0;i<16;i++)                                //因为有16行,所以要16次循环,依次选中1行

{                                                                //循环输出16行数据

HCLK=0;                                                //为列移位做准备,列移位为上升沿有效

LAT=0;                                                //为行锁存做准备,行锁存输出为上升沿有效

for(x=6;x>0;x--)                        //分成了6个部分,所以循环6次,

{                                                        //若为16*16的点阵,分成两个部分就可以了,循环两次

if(flag == 1)

{

temp = TempDat[x-1][i];        //读取点阵数据做输出,这里用到ia目的是先读取点阵数据的第二位字节,因一行16个点由两个字节组成,                                                                        //电路中的移位寄存器最后一位对应最后一列,所以要先输出一行中的第二个字节数据

}

if(flag == 0)                        //用于清屏

temp = 0xff;                //由于我的点阵里面用了8550三极管,相当于非门,所以这里高电平为灭

for(j=0;j<8;j++)                //移动列数据,移动6个字节后锁存输出才打开,因为1行的列数据分成了6个字节

{

LCLK = 0;                        //为列移位做准备

DATA = temp&0x01;          //将数据低位做输出,由电路图可知,移位寄存器的最后一位对应最后一列,因此先移最后一位

temp >>= 1;                  //将数据缓冲右移一位,为下次输出做准备

LCLK = 1;                        //将DATA上的数据移入寄存器

}                                                //移入单字节结束

}

HCLK = 1;                                                //HCLK拉高,列数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳)

LAT = 1;                                                //LAT拉高,将数据锁存输出到相应行的点阵发光管显示,显示一行后将保持到下一行显示开始

AB = 1;                                                    //列数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位,                                                                        //移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱

}

j = 64;

while(j--);                                                //每一行的显示,保持16个移位时间,因此,最后一行的显示,也要加入保持时间,补尝显示的亮度

HCLK = 0;                                                        //

HCLK = 1;                                                        //将最后一行数据移出

}

void DisplayMoveLeft(uint DatNum,uint MoveSpeed)

{

uchar NextByte[16];//下半个汉字的数据

uchar i,j=8,a,b;

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

{

NextByte[i]=DisplayDat[DatCnt][i];

}

DatCnt++;

if((DatNum*2)==DatCnt)DatCnt=0;

while(j--)//8次移位

{

for(i=0;i<16;i++)//16个字节移位

{

for(a=0;a<5;a++)

{

TempDat[a][i]<<=1;

if(TempDat[a+1][i]&0x80){TempDat[a][i]+=1;}

}

TempDat[5][i]<<=1;

if(NextByte[i]&0x80)

{

TempDat[5][i]+=1;

}

NextByte[i]<<=1;

}

for(b=0;b

{

Display(1);

}

}

}

void main(void)  //主入口函数

{

Display(0);

while(1)

{

DisplayMoveLeft(30,12);

}

}

点阵发光管怎么用C语言编程,LED点阵经验各种点阵驱动方法讲解相关推荐

  1. MDSF:面向语言编程LOP(Language Oriented Programming)方法介绍

    好几年前看了JetBrains的CEO Sergey Dmitive一篇文章Language Oriented Programming - The Next Programming Paradigm才 ...

  2. 面向语言编程LOP(Language Oriented Programming)方法介绍

    好几年前看了JetBrains的CEO Sergey Dmitive一篇文章Language Oriented Programming - The Next Programming Paradigm才 ...

  3. c语言编程led数码管,数码管显示函数

    1.代码选择 有时我们需要6个数码管显示我们想要看到的数字,比如计算结果呈现在数码管上,然而当要显示的数为"520"时又不想前面的3个数码管亮(也就是高位为0不显示),我们把这部分 ...

  4. 1507四舍五入c语言,JavaScript中用于四舍五入的Math.round()方法讲解

    此方法返回一个数四舍五入为最接近的整数的值. 语法 Math.round( x ) ; 下面是参数的详细信息: x: 一个数字 返回值: 返回数字四舍五入为最接近的整数的值. 例子: JavaScri ...

  5. NCT全国青少年编程能力等级测试教程(图形化编程、Python语言编程)

    图形化编程 Python语言编程 蓝桥杯STEMA测评-python真题讲解6 蓝桥杯STEMA测评-python真题讲解6_哔哩哔哩_bilibili 工橙院大豪猪 工橙院大豪猪的个人空间_哔哩哔哩 ...

  6. C语言编程实训企业计算,C语言编程项目实训

    24.C语言编程项目实训(高级)(全日制一个半月,夜班三个月,学费1390元) 理论与实操一体化课程: 一.C语言基础:1.应用C语言的各种特点:2.应用算法的含义.特点.表示方法 二.C的基本数据类 ...

  7. java 语言如何判断素数_C语言实验之判断素数(循环结构java)方法讲解

    C语言实验之判断素数(循环结构java)方法讲解 Problem Description 从键盘上输入任意一个正整数,然后判断该数是否为素数. 如果是素数则输出"This is a prim ...

  8. C语言循环结构素数判断,C语言实验之判断素数(循环结构java)方法讲解

    C语言实验之判断素数(循环结构java)方法讲解 Problem Description 从键盘上输入任意一个正整数,然后判断该数是否为素数. 如果是素数则输出"This is a prim ...

  9. 电路板必须用c语言编程吗,上大学才知道绿油油的板子叫PCB,如何成为一名电子工程师...

    原标题:上大学才知道绿油油的板子叫PCB,如何成为一名电子工程师 本文为十周年征文来稿,活动还在就行中欢迎烧友们拉到文章底部了解参加 对活动有疑问欢迎联系小助手(微信:XM1007721171) 我是 ...

  10. C/C++语言编程的隐患!

    C/C++语言编程的隐患! 本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内.内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决 ...

最新文章

  1. iOS 7 — navigationController is setting the contentInset and ContentOffset of my UIScrollView
  2. php合并数组中相同的元素
  3. 一个使用react native实现的短视频APP
  4. 2017/National _Java_C/2/数字划分
  5. 如何学习(记住)linux命令(常用选项)
  6. ubuntu下安装php openssl扩展
  7. python中inspect的用法(这个难懂,后期再补)
  8. python 学习爬虫教程~
  9. 人只会看到他想看的,不想看的视而不见
  10. NVIDIA解码器代码官方示例
  11. CCS6图文安装教程
  12. 数据可视化方向的毕业设计详细思路
  13. VS2015彻底卸载干净
  14. 信息系统项目管理师必背核心考点(四十一)风险管理计划
  15. MD5破解实验与个人的MD5暴破程序介绍
  16. 挖数据平台推出实时汇率API接口
  17. python爬虫处理滑块验证_python爬虫基础(9:验证识别之滑块验证)
  18. python语句中生成小数的语句_下列 Python 语句的输出结果是 。 print( 数量 {0}, 单价 {1} .format(100,285.6)) print(str.format(...
  19. win10 1050Ti 笔记本配置 TensorFlow-gpu 过程(多图超详细)
  20. 如何选择SCI期刊并能顺利发表

热门文章

  1. 你知道什么是嵌入式技术吗?
  2. It has been compressed and nested jar files must be stored without compression
  3. 车辆调度系统php,GitHub - Teamo1001/VehicleSYS: 一个基于Laravel框架的车辆调度、定位、管理系统,服务端...
  4. 微信小程序--图片相关问题合辑
  5. 纪录片《向北1500米》
  6. 《HelloGitHub》第 61 期
  7. 一个屌丝程序猿的人生(二十七)
  8. 前端cookie详解
  9. OAS、Swagger和Springfox
  10. 运维的工作内容是什么?有哪几种分类?