32X64点阵C程序
- 格式:doc
- 大小:36.50 KB
- 文档页数:5
摘要LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
它是多个独立的LED发光二极管封装而成,LED点阵显示屏可以显示汉字、数字、符号等,通常用来显示文字、时间、速度、系统状态等。
由于它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点,所以广泛应用于广告、证券、信息广播、新闻发布等方面,是目前国际上级为先进的显示媒体。
文章给出了一种基于AT89C52单片机的32 x 64点阵LED显示屏的设计方案。
包括系统具体的硬件设计方案,软件流程图和C语言程序等方面。
LED点阵显示屏是将要显示的汉字字模代码保存在某个存储空间,单片机通过读取字模并做相应的处理,然后以不同的显示方式显示在点阵屏上,主要适用于室内外汉字显示。
在负载范围内,只需通过简单的级联就可以对显示屏进行扩展,是一种成本低廉的图文显示方案。
关键词:LED点阵屏AT89C52 74HC595 行列驱动AbstractThe LED display monitor is uses the light emitter diode lattice module or the picture element unit composition plane formula screen. It is made of a number of independent LED light-emitting diode package. LED dot matrix can display Chinese characters, numbers, symbols. It usually used to display text, time, speed, system status and so on. Because it has the luminosity factor high, the service life long, the configuration nimble, the color rich as well as to the room inside and outside environment adaptiveness strong and so on the merits, therefore widely applies in aspects and so on advertisement, negotiable securities, information broadcast, news issue, is the present international higher authority for the advanced demonstration media.This paper gives an dot matrix 32 x 64 LED display design based on AT89C52 microcontroller.This system include specific hardware design,software flow chart.a code language procedures and so on. LED dot matrix display is to show the character font code stored in a storage space,MCU read the font codes and make the appropriate treatment,then show the font codes in different ways on the dot matrix display screen.It is mainly used suitable for indoor and outdoor display.In the load range,this system can be expanded the number of dot-matrix LED dot-matrix LED.So this is a low-cost graphics display options.Keywords:LED lattice screen, AT89C52, 74HC595, Line and column driver目录摘要 (I)Abstract (II)目录 (III)前言 (1)1 绪论 (2)1.1 LED显示屏的研究背景及经历过程 (2)1.1.1 LED显示屏的优势 (2)1.1.2 LED显示屏的发展经历 (3)1.2 显示屏发展趋势 (4)1.3 论文主要研究内容 (5)1.4 论文的主要工作 (5)2 LED和LED显示屏 (6)2.1 LED (6)2.1.1 LED简介 (6)2.1.2 LED优点 (7)2.1.3 LED分类 (8)2.2 LED显示屏 (8)2.2.1 LED显示屏简介 (8)2.2.2 LED显示屏分类 (9)3 系统基本组成及元器件 (10)3.1 系统基本组成 (10)3.2 系统的主要元器件介绍 (11)3.2.1 AT89C52单片机简介 (11)3.2.2 74HC595简介 (14)3.2.3 74HC138简介 (16)3.2.4 74HC04简介 (18)4 8×8点阵模块及驱动电路 (19)4.1 8×8点阵屏的内部结构及扫描原理 (19)4.2 驱动电路 (22)4.2.1 行驱动电路 (22)4.2.2 列驱动电路 (22)5 系统软件设计 (24)5.1 字模提取 (24)6系统仿真 (26)总结 (27)致谢 (28)参考文献 (29)附件 (30)前言LED 显示屏是八十年代后期在全球迅速发展起来的新型信息显示媒体,是集微电子技术、光电子技术、计算机技术、信息处理技术于一体的大型显示系统。
c语言实现16*64点阵led灯显示程序#include "reg51.h" //包含51单片机的端口和内部寄存器定义的头文件typedef unsigned char uint8; //定义字符型typedef unsigned int uint16; //定义整型typedef unsigned long uint32; //定义长整型uint32 dx,dxx,delayer; //字符显示偏移量uint8 brk,flag;uint8 BUFFER[22]; ??sbit RTC_RST = P2^1;sbit RTC_SCLK = P2^0;sbit RTC_IO = P2^2;uint8 bdata AA; ??//brk延时用sbit AA7 = AA^7;#define READ_SECOND 0x81#define WRITE_SECOND 0x80#define READ_MINE 0x83#define WRITE_MINE 0x82#define READ_HOUR 0x85#define WRITE_HOUR 0x84#define READ_DAY 0x87#define WRITE_DAY 0x86#define READ_MONTH 0x89#define WRITE_MONTH 0x88#define READ_WEEK 0x8b#define WRITE_WEEK 0x8a#define READ_YEAR 0x8d#define WRITE_YEAR 0x8cuint8 const code NUM[][16]= ??{{0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x 00,0x00,0x00},/*"0",0*/{0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x08,0x 00,0x00,0x00},/*"1",1*/{0x00,0x00,0x7E,0x42,0x04,0x08,0x10,0x20,0x20,0x42,0x42,0x42,0x3C,0x 00,0x00,0x00},/*"2",2*/{0x00,0x00,0x1C,0x22,0x42,0x40,0x40,0x20,0x18,0x20,0x42,0x42,0x3C,0x 00,0x00,0x00},/*"3",3*/{0x00,0x00,0x78,0x20,0x20,0x7E,0x22,0x22,0x24,0x24,0x28,0x30,0x20,0x 00,0x00,0x00},/*"4",4*/{0x00,0x00,0x1C,0x22,0x42,0x40,0x40,0x26,0x1A,0x02,0x02,0x02,0x7E,0x 00,0x00,0x00},/*"5",5*/{0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x 00,0x00,0x00},/*"6",6*/{0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x22,0x22,0x7E,0x 00,0x00,0x00},/*"7",7*/{0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x 00,0x00,0x00},/*"8",8*/{0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x 00,0x00,0x00},/*"9",9*/};uint8 const code WEEK[][32]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x7F,0xFE,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*"一",0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x20,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0 xFC,0x08,0x00,0x00,0x00},/*"二",1*/{0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0 xFE,0x00,0x00,0x00,0x00},/*"三",2*/{0x00,0x00,0x20,0x02,0x3F,0xFE,0x20,0x02,0x20,0x06,0x20,0x0A,0x3E,0x 12,0x21,0x12,0x21,0x22,0x21,0x22,0x21,0x22,0x21,0x22,0x21,0x22,0x21,0 x22,0x3F,0xFE,0x00,0x00},/*"四",3*/{0x00,0x00,0x00,0x00,0x7F,0xFF,0x24,0x20,0x04,0x20,0x04,0x20,0x04,0x2 0,0x04,0x20,0x0F,0xFC,0x04,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x 40,0x1F,0xFE,0x00,0x00},/*"五",4*/{0x00,0x00,0x10,0x02,0x30,0x04,0x30,0x08,0x18,0x10,0x08,0x10,0x04,0x 20,0x02,0x60,0x01,0x20,0x00,0x00,0x00,0x00,0x7F,0xFF,0x00,0x80,0x01,0 x80,0x00,0xC0,0x00,0x20},/*"六",5*/{0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0xF8,0x08,0x08,0x08,0x08,0x08,0x 08,0x08,0x08,0x08,0x08,0x0F,0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0 x08,0x0F,0xF8,0x00,0x00},/*"日",6*/};uint8 const code HZ1[][32]={//**************显示字模数据************************************************************** ************************************************************** **********************************************//*{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x02,0x02,0x07,0x04,0x08,0x08,0x08,0x10,0x08,0x10,0x08,0x 20,0x08,0x20,0x08,0x20,0x08,0x40,0x1F,0xC0,0x08,0x40,0x00,0x40,0x00,0 x40,0x7F,0xFE,0x00,0x00},/*"万",0*/{0x00,0x40,0x00,0xA0,0x00,0x90,0x10,0x80,0x1F,0xFC,0x10,0x80,0x7F,0x FF,0x10,0x80,0x1F,0xFC,0x00,0x80,0x1F,0xF8,0x10,0x88,0x1F,0xF8,0x00,0 x80,0x7F,0xFF,0x00,0x80},/*"事",1*/{0x00,0x01,0x42,0x42,0x42,0xC4,0x7E,0x28,0x42,0x10,0x42,0x28,0x42,0x 24,0x42,0x44,0x42,0x44,0x42,0x44,0x42,0x44,0x42,0x7F,0x7E,0x08,0x00,0 x18,0x00,0x08,0x00,0x08},/*"如",2*/{0x00,0x00,0x0F,0xE0,0x28,0x16,0x21,0x14,0x10,0x94,0x00,0x00,0x0F,0xF 8,0x08,0x88,0x08,0x48,0x0F,0xF8,0x00,0x00,0x7F,0xFF,0x02,0x20,0x04,0x 10,0x3F,0xFC,0x00,0x80},/*"意",3*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*///************************************************************ ************************************************************** ************************************************************** *********************0x55,0xaa};uint8 const code HZ[][32]= //汉字数组16X16点阵{//*****************开头显示字模程序************************************************************** ************************************************************** ******************************{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 x00,0x00,0x00,0x00,0x00},/*" ",1*/{0x00,0x00,0x02,0x04,0x05,0x0A,0x04,0x08,0x04,0x08,0x44,0x28,0x44,0x 49,0x44,0x4A,0x24,0x8C,0x25,0xB8,0x14,0x88,0x04,0x08,0x04,0x10,0x04, 0x20,0x04,0x7E,0x04,0x00},/*"孙",0*/{0x20,0x02,0x70,0x04,0x18,0x08,0x08,0x10,0x04,0x20,0x02,0x20,0x02,0x 40,0x01,0x40,0x01,0x40,0x00,0x80,0x7F,0xFF,0x00,0x80,0x00,0x80,0x00,0 x80,0x00,0x80,0x00,0x80},/*"大",1*/{0x10,0x00,0x28,0x20,0x20,0x40,0x20,0x80,0x20,0x80,0x21,0x00,0x21,0x 3E,0x3F,0x22,0x21,0x22,0x21,0x22,0x21,0x3E,0x3F,0x22,0x21,0x22,0x21,0 x22,0x21,0x3E,0x3F,0x00},/*"明",2*/{0x00,0x04,0x7E,0x1A,0x03,0xA8,0x02,0x68,0x02,0x48,0x3E,0x48,0x02,0x 49,0x02,0x0A,0x3F,0xEC,0x00,0x18,0x1F,0x88,0x10,0x88,0x1F,0xBF,0x10,0 x88,0x1F,0x88,0x00,0x08},/*"提",3*/{0x00,0x00,0x7F,0x81,0x04,0x7F,0x04,0x41,0x3F,0x41,0x04,0x7F,0x04,0xC 3,0x3F,0x75,0x05,0x55,0x04,0x55,0x3F,0x55,0x21,0x7F,0x3F,0x14,0x21,0x 14,0x3F,0x7F,0x00,0x00},/*"醒",4*/{0x20,0x02,0x70,0x04,0x18,0x08,0x08,0x10,0x04,0x20,0x02,0x20,0x02,0x 40,0x01,0x40,0x01,0x40,0x00,0x80,0x7F,0xFF,0x00,0x80,0x00,0x80,0x00,0 x80,0x00,0x80,0x00,0x80},/*"大",5*/{0x00,0x40,0x00,0xA0,0x21,0x06,0x71,0x18,0x0D,0x66,0x03,0x98,0x03,0x 20,0x0D,0x4E,0x04,0xF0,0x00,0x40,0x00,0x80,0x17,0xFA,0x20,0x02,0x7F,0 xFC,0x00,0x80,0x00,0x40},/*"家",6*/{0x00,0x80,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x0F,0x F8,0x00,0x00,0x21,0x03,0x71,0x84,0x18,0x48,0x04,0x10,0x02,0x20,0x01,0 x40,0x00,0x80,0x00,0x80},/*"今",7*/{0x00,0x02,0x20,0x04,0x70,0x08,0x18,0x10,0x04,0x20,0x02,0x40,0x01,0x 40,0x00,0x80,0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0 x80,0x3F,0xFC,0x00,0x00},/*"天",8*/{0x00,0x00,0x7F,0x02,0x00,0xC4,0x00,0xA8,0x00,0x90,0x1F,0x90,0x00,0x 90,0x00,0x80,0x7F,0xFF,0x00,0x00,0x0F,0xF0,0x08,0x10,0x0F,0xF0,0x08,0 x10,0x0F,0xF0,0x00,0x00},/*"是",9*///************************************************************ ************************************************************** ************************************************************** ************************************************************** ******0x55,0xaa,};uint8 const code Date[][32]={{0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x7F,0xFF,0x01,0x1 0,0x01,0x10,0x01,0x10,0x01,0x11,0x1F,0xF2,0x01,0x04,0x01,0x08,0x01,0x 08,0x3F,0xF0,0x00,0x10},/*"年",0*/{0x00,0x00,0x04,0x02,0x0A,0x04,0x08,0x08,0x08,0x10,0x08,0x10,0x08,0x 20,0x0F,0xE0,0x08,0x20,0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x20,0x08,0 x20,0x08,0x20,0x0F,0xE0},/*"月",1*/{0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0xF8,0x08,0x08,0x08,0x08,0x08,0x 08,0x08,0x08,0x08,0x08,0x0F,0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0 x08,0x0F,0xF8,0x00,0x00},/*"日",2*/{0x00,0x00,0x7F,0xFE,0x00,0x80,0x00,0x80,0x1F,0xF2,0x00,0x84,0x00,0x8 4,0x3F,0xF8,0x00,0x88,0x00,0x80,0x1F,0xF8,0x10,0x08,0x1F,0xF8,0x10,0x 08,0x1F,0xF8,0x00,0x00},/*"星",3*/{0x00,0x00,0x10,0x81,0x28,0xC2,0x21,0x44,0x21,0x24,0x22,0x00,0x3E,0x FF,0x22,0x44,0x22,0x44,0x22,0x7C,0x3E,0x44,0x22,0x7C,0x22,0x44,0x22,0 xFE,0x3E,0x44,0x00,0x44},/*"期",4*/{0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x 00,0x00,0x00},/*":",0*/};/************************************************************* ************************************************************** **/ 端口定义************************************************************** ************************************************************** **/sbit SER_CR=P1^5;sbit LED_G1=P1^7;sbit SER_EN=P1^6; //74595数据有效线/************************************************************* ************************************************************** **/ 函数名称:Delay/ 作用: 延时子程序主要用于LED的消隐**************************************************************************************************************************** **/void Delay() //延时子程序{uint16 i,j;for(i=0;i<0x14;i++)for(j=0;j<0x05;j++);}void led_y(uint8 dat){P1 &= 0xf0;P1 |= dat&0x0f;}/************************************************************* ************************************************************** **/ 函数名称:LED_Ser/ 作用: 发送串行数据到74LS595/ 入口参数:dat 为要发送的数据8位************************************************************** ************************************************************** **/void LED_Ser_8(uint8 dat){SBUF = dat;while(!TI);TI = 0;}void LED_Ser(uint16 dat){LED_Ser_8(dat);LED_Ser_8(dat>>8);}/************************************************************* ************************************************************** **/ 函数名称:LED_Ser_EN/ 作用: 用于在SER_EN口线上产生上长沿使74595发送的数据有效************************************************************** ************************************************************** **/void LED_Ser_EN(){SER_EN=0; //SER_EN=1; //产生上升沿脉冲用于使74595发的数据有效}/************************************************************* ************************************************************** **/ 函数名称:LED_Disp/ 作用: 在LED上显示字符或BMP/ 入口参数:*dat 为要显示的字符或BMP的数据的首地址指针************************************************************** ************************************************************** **/void LED_Disp(uint8 *dat){uint8 i,j,h;uint32 itmp;uint16 tmp,dat1h,dat1l,dat1,dat2,dat2h,dat2l;for(i = 0;i < 16;i++){LED_G1 = 0;if(dx>15){dxx+=32;dx=0;} //dx,dxx为显示偏移量for(h = 0;h < 4;h ++){itmp = i*2+dxx+h*32;dat1l = dat[itmp+1];dat1h = dat[itmp];dat2l = dat[itmp+32+1];dat2h = dat[itmp+32];dat1 = (dat1h<<8)|dat1l;dat2 = (dat2h<<8)|dat2l;tmp = (dat1>>dx)|(dat2<<(16-dx));if(dat2h==0x55||dat2h==0xaa){dxx=0;tmp=0;dx = 0;flag = 1;}LED_Ser(tmp);}LED_Ser_EN();led_y(i);Delay();LED_G1 = 1;// _delay_ms(1);if(delayer++ >25){dx++;delayer = 0;} }}void RTC_Write(uint8 dat){uint8 i;for(i=0;i<8;i++){RTC_IO=(bit)(dat&0x01);RTC_SCLK=1;RTC_SCLK=0;dat>>=1;}}uint8 RTC_Read(){uint8 i;for(i=0; i<8; i++){AA >>=1; //相当于汇编中的RRCAA7 = RTC_IO;RTC_SCLK = 1;RTC_SCLK = 0;}return AA;}void RTC_Write_Byte(uint8 addr,uint8 dat) {RTC_RST=0;RTC_SCLK=0;RTC_RST=1;RTC_Write(addr);RTC_Write(dat);RTC_SCLK=1;RTC_RST=0;}uint8 RTC_Read_Byte(uint8 addr){uint8 dat;RTC_RST=0;RTC_SCLK=0;RTC_RST=1;RTC_Write(addr|0x01);dat=RTC_Read();RTC_SCLK=1;RTC_RST=0;return dat;}typedef struct __SYSTEMTIME__{uint8 Second;uint8 Mine;uint8 Hour;uint8 Day;uint8 Month;uint8 Week;uint8 Year;}SYSTEMTIME;SYSTEMTIME TIMETYPE;void CurrentTime(SYSTEMTIME *dat){uint8 TimeValue;TimeValue=RTC_Read_Byte(READ_SECOND);dat->Second=(((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_MINE);dat->Mine= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_HOUR);dat->Hour= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f);TimeValue=RTC_Read_Byte(READ_DAY);dat->Day= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_MONTH);dat->Month= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); TimeValue=RTC_Read_Byte(READ_WEEK);dat->Week= (TimeValue&0x0f);TimeValue=RTC_Read_Byte(READ_YEAR);dat->Year= (((TimeValue&0x70)>>4)*10)+(TimeValue&0x0f); }void LED_Disp_Time_Year(SYSTEMTIME *dat) //年份的延时{uint8 j,i;for(j=0;j<16;){for(i=0;i<16;i++){LED_G1 = 0;LED_Ser_8(HZ[0]); //发送右LED_Ser_8(NUM[2]); //发送右LED_Ser_8(NUM[0]); //发送右LED_Ser_8(NUM[(dat->Year)/10]); //发送右LED_Ser_8(NUM[(dat->Year)%10]); //发送右LED_Ser_8(Date[0][i*2+1]);LED_Ser_8(Date[0][i*2]);LED_Ser_8(HZ[0]); //发送右LED_Ser_EN(); //使发送的数据显示led_y(j);Delay(); //延时LED_G1 = 1;j++;}}if(delayer++ >10){dx++;delayer = 0;}}void LED_Disp_Time_Month(SYSTEMTIME *dat) //日期的延时{uint8 j,i;for(j=0;j<16;){for(i=0;i<16;i++){LED_G1 = 0;LED_Ser_8(NUM[dat->Month/10]); //发送右LED_Ser_8(NUM[dat->Month%10]); //发送右LED_Ser_8(Date[1][i*2+1]); //发送右LED_Ser_8(Date[1][i*2]); //发送右LED_Ser_8(NUM[dat->Day/10]); //发送右LED_Ser_8(NUM[dat->Day%10]);LED_Ser_8(Date[2][i*2+1]);LED_Ser_8(Date[2][i*2]); //发送右LED_Ser_EN(); //使发送的数据显示led_y(j);Delay(); //延时LED_G1 = 1;j++;}}}void LED_Disp_Time_Week(SYSTEMTIME *dat) //星期的延时{uint8 j,i;for(j=0;j<16;){for(i=0;i<16;i++){LED_G1 = 0;LED_Ser_8(HZ[0]); //发送右LED_Ser_8(Date[3][i*2+1]); //发送右LED_Ser_8(Date[3][i*2]); //发送右LED_Ser_8(Date[4][i*2+1]); //发送右LED_Ser_8(Date[4][i*2]); //发送右LED_Ser_8(WEEK[dat->Week-1][i*2+1]);LED_Ser_8(WEEK[dat->Week-1][i*2]);LED_Ser_8(HZ[0]); //发送右LED_Ser_EN(); //使发送的数据显示led_y(j);Delay(); //延时LED_G1 = 1;j++;}}}void LED_Disp_Time_Time(SYSTEMTIME *dat) //时间的延时{uint8 j,i;for(j=0;j<16;){for(i=0;i<16;i++){LED_G1 = 0;LED_Ser_8(NUM[dat->Hour/10]); //发送右LED_Ser_8(NUM[dat->Hour%10]); //发送右LED_Ser_8(Date[5]); //发送右LED_Ser_8(NUM[dat->Mine/10]); //发送右LED_Ser_8(NUM[dat->Mine%10]); //发送右LED_Ser_8(Date[5]);LED_Ser_8(NUM[dat->Second/10]);LED_Ser_8(NUM[dat->Second%10]); //发送右LED_Ser_EN(); //使发送的数据显示led_y(j);Delay(); //延时LED_G1 = 1;Delay();j++;}}}/************************************************************* ************************************************************** **/ 函数名称:ET0_INT/ 作用: 定时器T0的中断服务程序用于延自加字符显示偏移量以产生字符滚动显示的效果************************************************************** ************************************************************** **/void Char_to_time(uint8 *dat){uint8 year,month,day,week,hour,mine;year=((dat[0]-'0')*16+(dat[1]-'0'));month=((dat[3]-'0')*16+(dat[4]-'0'));day=((dat[6]-'0')*16+(dat[7]-'0'));hour=((dat[9]-'0')*16+(dat[10]-'0'));mine=((dat[12]-'0')*16+(dat[13]-'0'));week=(dat[15]-'0');RTC_Write_Byte(0x8e,0x00); //写入允许RTC_Write_Byte(0x80,WRITE_SECOND|0x80);RTC_Write_Byte(0x8e,0x80); //禁止写入RTC_Write_Byte(0x8e,0x00); //写入允许RTC_Write_Byte(WRITE_YEAR,year); //写入新的秒数RTC_Write_Byte(WRITE_MONTH,month); //写入新的秒数RTC_Write_Byte(WRITE_DAY,day); //写入新的秒数RTC_Write_Byte(WRITE_HOUR,hour); //写入新的秒数RTC_Write_Byte(WRITE_MINE,mine&0x7f); //写入新的秒数RTC_Write_Byte(WRITE_WEEK,week); //写入新的秒数RTC_Write_Byte(0x8e,0x00); //写入允许RTC_Write_Byte(0x80,WRITE_SECOND&0x7f);RTC_Write_Byte(0x8E,0x80);}/************************************************************* ************************************************************** **/ 函数名称:main/ 作用: 主程序******************************************************* ******************************************************* ****************/void main(){SCON=0;SER_CR = 1;while(1){//****************这个是时间提醒屏蔽后不显示************************************************************** *******************//// while(!flag)// {// LED_Disp(HZ);// }//****************这个是显示年份屏蔽后不显示************************************************************** ******************//// while(dx!=0x14)// {// CurrentTime(&TIMETYPE);// LED_Disp_Time_Year(&TIMETYPE); //显示主程序// if(delayer++ >5){dx++;delayer = 0;}// }// dx=0;//*****************这个是显示日期的屏蔽后不显示************************************************************** *****************//*// while(dx!=0x14)// {// CurrentTime(&TIMETYPE);// LED_Disp_Time_Month(&TIMETYPE);// if(delayer++ >5){dx++;delayer = 0;}// }// dx=0;//*****************这个是显示星期的屏蔽后不显示************************************************************** ****************//*// while(dx!=0x14)// {// CurrentTime(&TIMETYPE);// LED_Disp_Time_Week(&TIMETYPE);// if(delayer++ >5){dx++;delayer = 0;}// }// dx=0;//******************这个是显示时间的屏蔽后不显示************************************************************** ***************//*// while(dx!=0x24)// {// CurrentTime(&TIMETYPE);// LED_Disp_Time_Time(&TIMETYPE);// if(delayer++ >5){dx++;delayer = 0;}// }// dx=0;// flag=0;//****************这个程序是显示汉字数据表屏蔽后不显******************************************************//*while(!flag){LED_Disp(HZ1);}flag=0;//***************结束************************************************************** **********************//*} }。
为了共同提高,还是把原程序发上来,原来打算发在“一乐社区”的,因为屏是在那里买的,手上有这个屏的朋友可能多点。
但人气没有这里的多。
每个屏蔽的接口和驱动结构都是大同小异,但是只要知道接口定义和电路结构都可以修改下就可以运行的。
如果手上有和我一样的屏的朋友,可以试下。
我的屏接口上这样的。
1是上半屏16行,2是下半屏16行,上下行扫描ABC D连在一起,16扫。
锁存共用。
其它是分开的。
=============================================================== 屏接口A CB D地R1地 G1地 R2地G2地 CLK1地 CLK2地STRE1 E2=============================================================== ====屏与单片机连接在程序中有,单片机是一个最小的系统,在P2^0,P2^1接两个按扭调时间,日期等.农历星期自动函数计算所等.用ST C12C5A60S2单片机,12M晶振,如用89C52单片的,要用到24M晶振,在中断中调下秒计数值.=============================================================源程序如下:/*本程序是用32*64双色点阵LE D屏显示时钟,公历日期,农历日期.用STC12C5A60S2的1T单片机,12M晶振,也可以用普通的ST C89C52的6T单片机,但是要用24M晶振,还要改下中断计时数据.使秒计时准确.用中断计时(50ms)和计公历日期,用到农历转换函数计算农历日期分两行显示,第一行显示:时:分:秒; 第二行分时4秒轮流显示公历日期\农历日期,公历日期显示从2000年~2099年.农历转换函数来源于网上,作者不详.其它部分自编.作者:桃源客, 编写日期:2010年11月23日 */#incl ude <AT89x52.H>#inc lude<intr ins.h>#de fineuchar unsi gnedchar#defi ne ui nt un signe d intucha r sec ond,m inute=14,h our=23,day=22,m onth=11,ye ar=10; //定义秒、分、时、日、月、年变量并初始sbitKEYM=P2^0; //调整键,按一次设置状态位加1,轮流切换到设置时,分,年,月,日,正常状态.sbi t KEY H=P2^1; //增加键,在设置状态时按一次相应设置位加1bi t KEY M_S,K EYH_S; //相应按键按下状态指示ucha r KCO DE,se t_S; //键盘代码,设置状态位置指示b it S HAN,d ip_fl ag; //闪烁标志位,分时显示公农历u charcon; //秒计数器,用于4秒轮显公农历日期ucha r col,disr ow; //col为位移变量,disr ow为行变量uch ar co de ta b[][16]; //时间及公历日期显示用的数字字模uch ar co de NL month_tab[][32]; //农历月份字模uch ar co de NL day_S[][32]; //农历月10位字模u charcodeWEEK_S[][32]; //用于星期显示字模ucha r BUF F1[8];uch ar BU FF2[8]; //下半屏缓冲sbi t R1=P3^3; //L ED屏接口与单片机硬件接法。
板子上有8*8点阵模块32块, 32块74HC595,一个7805,两个7406,一个74ls138,1个74ls244, 8个IRF540 大功率MOS管。
上面一半是红的,下面一半是绿的。
测试环境:(屏需要3.5v 和 9v电源)屏的接口:这个屏的布局是这样的,用D0~D3,控制4个横条的数据,每条里有8行LED。
一整行的数据是一次传完,64bit. 每条里的每行是通过74ls138解码产生的。
ABC是74LS138的ABC编码输入,E是输出允许,低电平有效。
S是74HC595的锁存,Y是串行时钟,D0~ D3是4排74HC595的数据输入端。
屏的接口,这里用四根线D0~D3这里面的信号时74ls138 和HC595的时钟和锁存信号74HC595走马灯演示程序(C语言)#include //51芯片管脚定义头文件#include //内部包含延时函数_nop_();#define uchar unsigned char#define uint unsigned intuchar code DAT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};sbit SDATA_595=P1^0; //串行数据输入sbit SCLK_595 =P1^1; //移位时钟脉冲sbit RCK_595 =P1^2; //输出锁存器控制脉冲uchar temp;/********************************************************//* */ /* 延时子程序*/ /* */ /********************************************************/void delay(int ms){int k;while(ms--){for(k=0; k<250; k++){_nop_();_nop_();_nop_();_nop_();}}}/********************************************************//* */ /*将显示数据送入74HC595内部移位寄存器 */ /* */ /********************************************************/void WR_595(void){uchar j;for (j=0;j<8;j++){temp=temp<<1;SDATA_595=CY;SCLK_595=1; //上升沿发生移位_nop_();_nop_();SCLK_595=0;}}/********************************************************//* */ /*将移位寄存器内的数据锁存到输出寄存器并显示 *//* */ /********************************************************/void OUT_595(void){RCK_595=0;_nop_();_nop_();RCK_595=1; //上升沿将数据送到输出锁存器_nop_();_nop_();_nop_();RCK_595=0;}/********************************************************/* */ * 主程序 */ * */ *********************************************************/main(){SCLK_595=0;RCK_595=1;while(1){uchar i;for (i=0; i<8; i++){temp=DAT[i]; //取显示数据WR_595();OUT_595();delay(100);}}}。
大型双色点阵屏C语言程序/***************************************************32*128 LED点阵屏C 程序******************************************************auther:chaozheng futime:2007.12.14 nightemail:4450035@*******************************************************///595连级输出数据,138行驱动。
P1.0~P1.3为点阵显示汉字程串口输出字符数据,//P3口输出行扫描信号,P1.5输出595锁存信号#include "AT89X51.H"#define uchar unsigned char#define uint unsigned int#define False 0#define True (!False)#define P_138_scan P3 //138扫描,P3.0~P3.3sbit P_RED1_CON=P1^0; //红数据端口,低电平有效sbit P_RED2_CON=P1^2;sbit P_GREEN1_CON=P1^1; //绿数据端口,低电平有效sbit P_GREEN2_CON=P1^3;sbit P_138_EN=P3^4; //138使能端sbit P_595_LT=P1^5; //595锁存,高电平有效sbit P_595_SK=P1^6; //595脉冲端口sbit P_led_work=P1^4; //系统工作状态1秒闪烁sbit ACC0=0xe0;sbit ACC7=0xe7;uchar buff0[];uchar buff1[];uchar buff2[];uchar buff3[];uchar data BUFFER[1]={0};uchar code hanzi[5][128]={//热0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x60,0xC0,0x00,0x00,0x70,0xC0,0x00, 0x00,0x70,0xC0,0x00,0x00,0x30,0xC0,0x00,0x00,0x30,0xD8,0x00,0x00,0x3C,0xFC,0x00, 0x00,0x7C,0xFC,0x00,0x01,0xFF,0xD8,0x00,0x01,0xF7,0xD8,0x00,0x00,0x31,0xD8,0x00,0x0F,0xB3,0xD9,0x00,0x06,0x37,0x1F,0x00,0x00,0xF6,0x0F,0x00,0x00,0xFE,0x0F,0x00, 0x00,0x6C,0x07,0x80,0x01,0xF1,0x88,0x00,0x01,0x99,0xCE,0x00,0x03,0x9C,0xCF,0x00, 0x03,0x9C,0xC7,0x00,0x07,0x0C,0x43,0x00,0x07,0x00,0x03,0x00,0x02,0x00,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //烈0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x1C,0x00, 0x00,0x1F,0x1C,0x00,0x01,0xFF,0x9C,0x00,0x01,0xFC,0x0C,0x00,0x00,0xF8,0x0C,0x00, 0x00,0x39,0xCC,0x00,0x00,0x34,0xCC,0x00,0x00,0x7E,0xCC,0x00,0x00,0x7E,0xCC,0x00 ,0x00,0xCE,0xCC,0x00,0x01,0xEC,0xCC,0x00,0x01,0xFC,0xCC,0x00,0x03,0x78,0xCC,0x00 ,0x00,0x38,0xCC,0x00,0x00,0x30,0xFC,0x00,0x00,0x70,0x3C,0x00,0x00,0xE0,0x1C,0x00, 0x01,0xC1,0x98,0x00,0x03,0xB1,0xC6,0x00,0x06,0x39,0xC7,0x00,0x06,0x38,0xE7,0x80, 0x0E,0x18,0xE3,0x80,0x0E,0x18,0x03,0xC0,0x0E,0x00,0x01,0xC0,0x04,0x00,0x00,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//欢0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0E,0x00,0x00,0x01,0xCE,0x00,0x00, 0x1F,0xCF,0xF0,0x00,0x30,0xDF,0xF8,0x00,0x0C,0x9E,0x30,0x00,0x0F,0xB6,0x60,0x00, 0x07,0x06,0xC0,0x00,0x07,0x07,0x00,0x00,0x1C,0xCD,0xC0,0x00,0x78,0x0C,0xE0,0x00 ,0x20,0x38,0x78,0x00,0x00,0xF0,0x3E,0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//迎0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x5C,0x00,0x00,0x1E,0x7B,0xF0,0x00, 0x0F,0x67,0xF0,0x00,0x00,0x63,0x30,0x00,0x1F,0x63,0x30,0x00,0x13,0x63,0x60,0x00, 0x02,0x7B,0xE0,0x00,0x02,0xF3,0x80,0x00,0x02,0x03,0x00,0x00,0x7F,0xE3,0x00,0x00, 0x7C,0xFF,0xFE,0x00,0x40,0x0F,0xFE,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0x78,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x07,0xC0,0x00, 0x00,0x0F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00, 0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0x80,0x00, 0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x00,0x00, //!0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00, 0x00,0x07,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };uchar code P_138_SDATA[16]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, //16行段码0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};uchar P_rol_count;void delay(uchar t); //延时void outd_data_send(uchar *d); //发送数据void cpu_init(void);void outd_data_send1(uchar *d);void open_col(void);void close_col(void);void main(){ucharchar_count,num=0,k; //char_count是从字模数组里向后取数据时的计数器,用以改变显示文字的内容.cpu_init(); //初始化P1口while(1) //重复循环显示{for(char_count=0;char_count<=31;char_count++){if(char_count<16){outd_data_send(&hanzi[0][char_count*4+num]); //输出第1个字的第一字节。
//最后完成时间:2011年2月1日14:49:32//Made By:马涛#include<reg52.h>#include"zimo.h"#define uchar unsigned char#define uint unsigned int#define SPEED 2 //定义速度与速度成反比#define LIGHT 8 //定义亮度:取值范围0--10#define NUMBER 10 //定义要显示总32X32汉字个数,计算方法:NUMBER=汉字个数#define RAD1 0 //0123全为红色0101橙色#define RAD2 1 //2301全为绿色#define GREEN1 2 //0231上红下绿#define GREEN2 3 //2103下红上绿uchar word=0,col=0,coll=0,disrow=0;//wor为要显字变量,col为位移变量,col1为字节偏移量,disrow为行变量uchar BUFF__UP[17]; //上半屏显示缓冲上下缓冲字节数取值=[2*板点阵宽度/8]+1比较保险,即两倍板的点阵字节数.uchar BUFFDOWN[17]; //下半屏显示缓冲uchar R_G[6]; //调整颜色sbit G1=P2^0;sbit G2=P2^1;//红色数据sbit R1=P2^2;sbit R2=P2^3;//绿色数据sbit CLK=P2^4;sbit STB=P2^5;sbit OE =P2^6;//74HC138使能:低有效uchar Recive=1;//根据列指针由双字节合并为单字节的子程序模块uchar Combine_2byte(uchar h1,uchar h2){uchar T_date,tempcol;tempcol=coll;T_date=(h1>>tempcol)|(h2<<(8-tempcol));return T_date;}//分别装载上、下半屏点阵数据void Load_one_line(void){BUFF__UP[0]=Table[word][disrow*4+0];//装载上半屏一线点阵数据BUFF__UP[1]=Table[word][disrow*4+1];BUFF__UP[2]=Table[word][disrow*4+2];BUFF__UP[3]=Table[word][disrow*4+3];BUFF__UP[4]=Table[word+1][disrow*4+0];BUFF__UP[5]=Table[word+1][disrow*4+1];BUFF__UP[6]=Table[word+1][disrow*4+2];BUFF__UP[7]=Table[word+1][disrow*4+3];BUFF__UP[8]=Table[word+2][disrow*4+0];BUFF__UP[9]=Table[word+2][disrow*4+1];BUFF__UP[10]=Table[word+2][disrow*4+2];BUFF__UP[11]=Table[word+2][disrow*4+3];BUFF__UP[12]=Table[word+3][disrow*4+0];BUFF__UP[13]=Table[word+3][disrow*4+1];BUFF__UP[14]=Table[word+3][disrow*4+2];BUFF__UP[15]=Table[word+3][disrow*4+3];BUFF__UP[16]=Table[word+4][disrow*4+3];BUFFDOWN[0]=Table[word][64+disrow*4+0];//装载下半屏一线点阵数据BUFFDOWN[1]=Table[word][64+disrow*4+1];BUFFDOWN[2]=Table[word][64+disrow*4+2];BUFFDOWN[3]=Table[word][64+disrow*4+3];BUFFDOWN[4]=Table[word+1][64+disrow*4+0];BUFFDOWN[5]=Table[word+1][64+disrow*4+1];BUFFDOWN[6]=Table[word+1][64+disrow*4+2];BUFFDOWN[7]=Table[word+1][64+disrow*4+3];BUFFDOWN[8]=Table[word+2][64+disrow*4+0];BUFFDOWN[9]=Table[word+2][64+disrow*4+1];BUFFDOWN[10]=Table[word+2][64+disrow*4+2];BUFFDOWN[11]=Table[word+2][64+disrow*4+3];BUFFDOWN[12]=Table[word+3][64+disrow*4+0];BUFFDOWN[13]=Table[word+3][64+disrow*4+1];BUFFDOWN[14]=Table[word+3][64+disrow*4+2];BUFFDOWN[15]=Table[word+3][64+disrow*4+3];BUFFDOWN[16]=Table[word+4][64+disrow*4+3];}//发送屏一线点阵数据void Send_one_line(void){char s;uchar TEMP0,TEMP1,i,inc;if(col<8) inc=0;if(8<=col&&col<16) inc=1;if(16<=col&&col<24) inc=2;if(24<=col&&col<32) inc=3;for(s=0+inc;s<=8+inc;s++){TEMP0=Combine_2byte(BUFFDOWN[s],BUFFDOWN[s+1]); TEMP1=Combine_2byte(BUFF__UP[s],BUFF__UP[s+1]);for(i=0;i<8;i++){R_G[0]=~(TEMP1>>i)&0x01; //取出最高位R_G[1]=~(TEMP0>>i)&0x01; //取出最高位R_G[2]=0xff;R_G[3]=0xff;R_G[4]=0x00;R_G[5]=0x00;R1=R_G[RAD1];R2=R_G[RAD2];G1=R_G[GREEN1];G2=R_G[GREEN2];CLK=0;CLK=1; //移位时钟}}}//亮度调节延时void delay(unsigned int i){unsigned int j;for(;i>0;i--){for(j=5;j>0;j--);}}//亮度调整void PWM_LIGHT(uchar p){OE=0;delay(p);OE=1;delay(10-p);}void UART() interrupt 4{EA=1;if (RI) //RI接受中断标志{RI=0; //清除RI接受中断标志Recive=SBUF; //SUBF接受/发送缓冲器//PWM_LIGHT(Recive);}EA=1;}//主函数入口void main(void){uchar i,move;SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1TMOD|= 0x20; //定时器工作方式2PCON|= 0x80;TH1 = 0xE6; // //baud*2 /* 波特率9600、数据位8、停止位1。
效验位无(12M)TL1 = 0xE6;TR1 = 1;ES = 1; //开串口中断EA= 1; // 开总中断TR1=1; //启动定时器1PS=1; //串口中断优先R1=0;//数据初始化R2=0;G1=0;G2=0;while(1){for(col=0;col<32;col++)//循环32次,点亮并移动一个汉字,步进是一位,{coll=col%8;move=(col-24==0)?120:SPEED;//移动几个字后停留一段时间,[有一点bug,用%不对,用—可以]for(i=0;i<move;i++)//汉字在屏幕上的停留时间(即移动速度快慢){for(disrow=0;disrow<16;disrow++)//扫描16行{Load_one_line();//装载上下两屏各一线点阵数据Send_one_line();//发送一线点阵数据STB=0;STB=1; // 输出锁存P1=disrow;// 行扫描LIGHTPWM_LIGHT(LIGHT);}}}word=word+1;// 一个汉字移动后,指向下一个汉字if(word>=NUMBER){word=0;//移动完NUMBER个汉字后重新开始}}}。