LED点阵显示与C语言编程(精)

合集下载

16×16点阵LED显示屏整个过程及C语言程序

16×16点阵LED显示屏整个过程及C语言程序

16×16点阵L‎E D显示屏‎整个过程及‎C语言程序‎7.1功能要求‎设计一个室‎内用16×16点阵L‎E D图文显‎示屏,要求在目测‎条件下LE‎D显示屏各‎点亮度均匀‎、充足,可显示图形‎和文字,显示图形或‎文字应稳定‎、清晰无串扰‎。

图形或文字‎显示有静止‎、移入移出等‎显示方式。

7.2方案论证‎从理论上说‎,不论显示图‎形还是文字‎,只要控制与‎组成这些图‎形或文字的‎各个点所在‎位置相对应‎的LED器‎件发光,就可以得到‎我们想要的‎显示结果,这种同时控‎制各个发光‎点亮灭的方‎法称为静态‎驱动显示方‎式。

16×16的点阵‎共有256‎个发光二极‎管,显然单片机‎没有这么多‎端口,如果我们采‎用锁存器来‎扩展端口,按8位的锁‎存器来计算‎,16×16的点阵‎需要256‎/8=32个锁存‎器。

这个数字很‎庞大,因为我们仅‎仅是16×16的点阵‎,在实际应用‎中的显示屏‎往往要大的‎多,这样在锁存‎器上花的成‎本将是一个‎很庞大的数‎字。

因此在实际‎应用中的显‎示屏几乎都‎不采用这种‎设计,而采用另一‎种称为动态‎扫描的显示‎方法。

动态扫描的‎意思简单地‎说就是逐行‎轮流点亮,这样扫描驱‎动电路就可‎以实现多行‎(比如16行‎)的同名列共‎用一套列驱‎动器。

具体就16‎×16的点阵‎来说,我们把所有‎同一行的发‎光管的阳极‎连在一起,把所有同一‎列的发光管‎的阴极连在‎一起(共阳的接法‎),先送出对应‎第一行发光‎管亮灭的数‎据并锁存,然后选通第‎一行使其燃‎亮一定的时‎间,然后熄灭;再送出第二‎行的数据并‎锁存,然后选通第‎二行使其燃‎亮相同的时‎间,然后熄灭;……第十六行之‎后又重新燃‎亮第一行,这样反复轮‎回。

当这样轮回‎的速度足够‎快(每秒24次‎以上),由于人眼的‎视觉暂留现‎象,我们就能看‎到显示屏上‎稳定的图形‎了。

基于单片机控制的LED点阵屏 含设计报告 电路原理图 C语言程序

基于单片机控制的LED点阵屏 含设计报告 电路原理图 C语言程序

电子系统综合设计与训练系部:工业中心项目:LED点阵显示屏班级:D自集成111班姓名:万文强(第4组)指导老师:杨老师时间:6月10日-7月12日前言LED是发光二极管英文Light Emitting Diode 的简称,是六十年代末发展起来的一种半导体显示器件,七十年代,随着半导体材料合成技术、单晶制造技术和P-N结形成技术的研究进展,发光二极管在发光颜色、亮度等性能得以提高并迅速进入批量化和实用化。

进入八十年代后,LED在发光波长范围和性能方面大大提高,并开始形成平板显示产品即LED显示屏。

LED电子显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。

它是集微电子技术、光电子技术、计算机技术、信息处理技术于一体的显示系统,是目前国际上极为先进的显示媒体。

由于它具有发光效率高、使用寿命长、组态灵活、色彩丰富、工作性能稳定以及对室内室外环境适应能力强等优点而日渐成为显示媒体中的佼佼者。

在我国改革开放之后,特别是进入90年代国民经济高速增长,对公众场合发布信息的需求日益强烈,LED显示屏的出现正好适应了这一市场形势,因而在LED 显示屏的设计制造技术与应用水平上都得到了迅速的提高,生产也得到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。

LED显示屏经历了从单色、双色图文显示屏,到图像显示屏的发展过程。

LED电子显示屏是由几万--几十万个半导体发光二极管像素点均匀排列组成。

用不同的材料可以制造不同色彩的LED像素点。

目前应用最广的是红色、绿色、黄色。

而蓝色和纯绿色LED的开发已经达到了实用阶段。

随着信息产业的高速发展,LED显示屏作为信息传播的一种重要手段成为现代信息化社会的一个闪亮标志。

近年LED显示屏已广泛应用于室内、外需要进行服务内容和服务宗旨宣传的公众场所如银行、营业部、车站、机场、港口、体育场馆等信息的发布,政府机关政策、政令,各类市场行情信息的发部和宣传等。

目前,对于那些需要显示的信息量不是很大,分辨率不是很高,又需要制造成本相对比较低的场合,使用大、小屏幕LED点阵显示器是比较经济适用的,它可以用单片机控制实现显示字符、数字、汉字和简单图形,可以根据需要使用不同字号、字型。

《单片机应用技术(C语言)》实训课件—4.3 LED点阵式电子广告牌控制

《单片机应用技术(C语言)》实训课件—4.3 LED点阵式电子广告牌控制

//第一维下标取值范围为0~9 //每个字符扫描显示200次,控制每个字符显示时间
//第二维下标取值范围为0~7 //行控制 //将指定数组元素赋值给P0口,显示码
举一反三2
使用4个8×8点阵LED显示屏扩展设计一个16×16的LED点阵式 电子广告牌,循环显示“单片机”字样。
若干个8×8 LED点阵显示模块进行简单 地拼装,可以构成各种尺寸的大屏幕显 示屏,如16×16、32×32、64×16、 128×32等点阵尺寸。
{0xEF,0xFF,0xEF,0x07,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77,0xAB,0x77,0xAF,0x77,0
x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF}//机
循环以上过程。
软件设计思路
多个字符的显示程序可以在一个字 符显示程序的基础上再外嵌套一个循环。
用二维数组存储显示数字0~9。
unsigned char code led[10][8]={{0xE7,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xE7}, //0 {0xFF,0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7}, //1 {0xFF,0xE1,0xCF,0xCF,0xE3,0xF9,0xF9,0xC1}, //2 {0xFF,0xE1,0xCF,0xCF,0xE3,0xCF,0xCF,0xE1}, //3 {0xFF,0xCF,0xC7,0xCB,0xCD,0xC1,0xCF,0xCF}, //4 {0xFF,0xE1,0xFD,0xE1,0xCF,0xCF,0xCF,0xE1}, //5 {0xFF,0xE3,0xF9,0xE1,0xC9,0xC9,0xC9,0xE3}, //6 {0xFF,0xC0,0xCF,0xE7,0xE7,0xF3,0xF3,0xF3}, //7 {0xFF,0xE3,0xC9,0xC9,0xE3,0xC9,0xC9,0xE3}, //8 {0xFF,0xEC,0xC9,0xC9,0xC9,0xC3,0xCF,0xE3}}; //9

led电子显示屏的设计c语言(16行32列)_毕业论文

led电子显示屏的设计c语言(16行32列)_毕业论文

摘要:本设计是以凌阳单片机 SPCE061A 为系统的核心控制器,该点阵电子显示屏采用16*16点阵模块构成16行*32列点阵显示的LED 电子显示屏,能够实现字符的多功能显示、掉电时间数据不丢失。

介绍了系统的软、硬件设计方案。

系统不仅能够实现汉字、数字和字母之间动态移动显示,还能通过键盘来改变显示的字符、移动方向、移动速度和显示效果,并且具有语音播报时间功能,通过按键来语音调整时间等功能。

关键字:SPCE061A 电子显示屏译码器Abstract :The design is based on Sunplus MCU SPCE061A core controller for the system, the electronic display uses16 * 16 dot matrix modules form 16 rows * 32 dot matrix display LED electronic display, to achieve multi-functional character display , power-down time data is not lost. Introduced the system of software and hardware design. System not only enables Chinese characters, numbers and letters, the dynamic between the mobile display, but also through the keyboard to change the display of characters, moving direction, speed and display result and time functions with voice broadcast, voice hrough the buttons to adjust the time and so on.Key words : SPCE061A Electronic display Decoder目录一、引言 (3)二、方案论证与分析 (4)2.1 单片机选择 (4)2.2 显示方式选择 (4)2.3 数字时钟选择 (5)2.4 译码器选择 (5)2.5 点阵模块的选择 (5)三、总体方案 (6)3.1工作原理 (6)3.2 设计总体框图 (6)四、硬件设计 (7)4.1 凌阳SPC061A单片机主控模块 (7)4.2 LED显示模块 (7)4.3时钟电路模块 (8)4.4 电源电路 (9)4.5 按键控制部分 (9)五、软件设计 (10)5.1主程序流程图 (10)5.2移动方向程图 (10)5.3显示流程图 (11)5.4移动速度程序流程图 (12)5.5显示流程图 (4)5.5.1调年子程序流程图 (12)5.5.2调时子程序流程图 (13)5.5.3调月子程序流程图 (13)5.5.4调秒子程序流程图 (13)5.5.5调日子程序流程图 (13)5.5.6调分子程序流程图 (14)5.6调显示效果子程序流程图 (14)六、调试 (15)6.1硬件调试 (15)6.1程序调试 (15)6.3整机调试 (15)七、使用说明书 (16)八、设计总结 (17)附录 (18)附录一原理图 (18)附录二程序清单 (19)一、引言LED电子显示屏(Light Emitting Diode Panel)是由几百--几十万个半导体发光二极管构成的像素点,按矩阵均匀排列组成。

51单片机驱动LED点阵扫描显示C语言程序

51单片机驱动LED点阵扫描显示C语言程序

51单片机驱动LED点阵扫描显示C语言程序LED点阵屏发光亮度强,指示效果好,可以制作运动的发光图文,更容易吸引人的注意力,信息量大,随时更新,有着非常好的广告和告示效果。

笔者此处就LED点阵屏动态扫描显示作一个简单的介绍。

1、LED点阵屏显示原理概述图1-1为一种8x8的LED点阵单色行共阳模块的内部等效电路图,对于红光LED其工作正向电压约为1.8v,其持续工作的正向电流一般10ma左右,峰值电流可以更大。

如下图,当某一行线为高电平而某一列线为低时,其行列交叉的点就被点亮,当某一行线为低电平时,无论列线如何,对应的这一行的点全部为暗。

LED点阵屏显示就是通过一定的频率进行逐行扫描,数据端不断输入数据显示,只要扫描频率足够高,由于人眼的视觉残留效应,就可以看到完整的文字或图案信息。

通常有4、8、16线扫描方式,扫描行数越少,点阵的显示亮度越好,但相应硬件数据寄存器需求也越多。

图1-1 点阵内部原理图2、硬件设计微控制器的IO口均不能流过过大的电流,LED点亮时有约10ms 的电流,因此LED点阵引脚不要直接接单片机IO口,应先经过一个缓冲器74HC573。

单片机IO口只需很小的电流控制74HC573即可间接的控制LED点阵某一行(或某一列),而74HC573输出也能负载约10ms的电流。

设置LED每点驱动电流为ID =15ma,这个电流点亮度好,并且有一定的裕度,即使电源输出电压偏高也不会烧毁LED,限流电阻值R = (VCC- VCE – VOL – VLED) / IDVCC为5v供电,VCE为三极管C、E间饱和电压,估为0.2v,VOL为74hc573输出低电平时电压,不同灌电流,此值不一样,估为0.2v,具体查看规格书,VLED为红光驱动电压,估为1.7v,根据上式可算出限流电阻为R = 200R。

LED点阵屏需接收逐个扫描信号,扫描到相应列(或行),对应的列(或行)数据有效,即显示这一列(或行)的信息。

基于单片机的LED点阵电子钟 C程序代码

基于单片机的LED点阵电子钟 C程序代码

//------------------------------定义头文件#include <reg51.h>//MCS-51单片机//------------------------------定义缩写字符#define uchar unsigned char#define uint unsigned int//------------------------------定义扬声器接口,低电平使能sbit Bell_Out = P1 ^ 5;//扬声器驱动//------------------------------定义DS18B20音sbit DQ = P1 ^ 6;//ds1820data(单总线)//------------------------------定义DS1302时钟接口sbit clock_clk = P3 ^ 5;//ds1302_clk(时钟线)sbit clock_dat = P3 ^ 6;//ds1302_dat(数据线)sbit clock_Rst = P3 ^ 7;//ds1302_Rst(复位线)//-----------------------------定义数据口#define Led_13 P0 //第1、3屏数据口#define Led_24 P2 //第2、4屏数据口#define Led_E P1 //74HC154的BCD列驱动(P1.0~P1.4)sbit Led_EA = P1 ^ 4;//显示列驱动器(74HC154)使能//-----------------------------独立键盘定义sbit Add_Key = P3 ^ 1;//前位加1键sbit Add2_Key = P3 ^ 0;//后位加1键sbit OK_Key = P3 ^ 2;//确定键sbit int_Key = P3 ^ 3;//中断入口//-----------------------------定义累加器A中的各位sbit a0 = ACC ^ 0;sbit a1 = ACC ^ 1;sbit a2 = ACC ^ 2;sbit a3 = ACC ^ 3;sbit a4 = ACC ^ 4;sbit a5 = ACC ^ 5;sbit a6 = ACC ^ 6;sbit a7 = ACC ^ 7;//------------------------------------定义全局变量bit txx = 0;uchar settime;//定义标志位uchar yy,mo,dd,xq,hh,mm,bn;//定义时间映射全局变量(专用寄存器)static uchar timecount = 0;//定义静态软件计数器变量static uchar pp = 0;//定义静态小时更新用数据变量//------------------------------------函数声明(按字母顺序排列)void Beep(void);void Beep_key(void);void Beep_set(void);void clearRAM (void);uchar clock_in(void);void clock_out(uchar dd);void Delay(int num);void DelayM(uint a);void display (void);void display_s (void);void Init_1302(void);void int1 (void);void putin (uchar u);uchar read_clock(uchar ord);void read_clockS(void);void Set_time(unsigned char sel);void setput (uchar k);void Timer0(void);void Timer0_Init(void);void write_clock(uchar ord, uchar dd);uchar DL (uchar);uchar DSS (void);//-----------------------------定义显示缓冲寄存器(32个字节全局变量)uchar Ledplay [35];////-----------------------------定义字符数据表单(二维数组)uchar code no[][10]={//-----------------------------------数字字符表{0x7E,0xFF,0x81,0x81,0xFF,0x7E,0},//0{0x82,0xFF,0xFF,0x80,0}, //1{0xC6,0xE7,0xB1,0x99,0x8F,0x86,0},//2{0x42,0xC3,0x89,0x89,0xFF,0x76,0},//3{0x30,0x28,0xA6,0xFF,0xFF,0xA0,0},//4{0x4F,0xCF,0x89,0x89,0xF9,0x71,0},//5{0x7E,0xFF,0x89,0x8B,0xFB,0x70,0},//6{0x03,0x03,0xF9,0xFF,0x07,0},//7{0x76,0xFF,0x89,0x89,0xFF,0x76,0},//8{0x0E,0xDF,0xD1,0x91,0xFF,0x7E,0},//9//-----------------------------------星期字符表{0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0},//一10{0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x40,0},//二{0x82,0x92,0x92,0x92,0x92,0x92,0x82,0x80,0},//三{0xFE,0xA2,0x9E,0x82,0x9E,0xA2,0xFE,0},//四{0x80,0x89,0xFF,0x89,0x89,0x89,0xF9,0x80,0},//五{0x88,0x68,0x38,0x0E,0x38,0x68,0x88,0},//六{0xFE,0x92,0x92,0x92,0x92,0xFE,0},//日10+6//-----------------------------------特殊字符表{0x6C,0x6C,0},//“:”17{0x18,0x18,0x18,0x18,0},//“-”18{0x06,0x06,0x78,0xFC,0x84,0x84,0x84,0x80,0},//“oC”19{0x02,0x8E,0xFC,0xFC,0x8E,0x02,0},//“Y”(在调时时表示年)20{0x80,0x7E,0x15,0x15,0x95,0xFF,0},//“月”21{0xFE,0x92,0x92,0x92,0x92,0xFE,0}//“日”22};//-----------------------------------开机画面,显示“DYDIY”uchar code dydiy[]={//显示“DYDIY”0x82,0xFE,0xFE,0x82,0xFE,0x7C,0,0x02,0x8E,0xFC,0xFC,0x8E,0x02,0,0x82,0xFE,0xFE,0x82,0xFE,0x7C,0,0x82,0xFE,0xFE,0x82,0,0x02,0x8E,0xFC,0xFC,0x8E,0x02,0,0x99};//---------------------------------------延时函数2uS/次void Delay(int num){for (;num>0;num--);}//---------------------------------------延时函数1MS/次void DelayM(unsigned int a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。

16×16点阵LED显示屏整个过程及C语言程序(1).

16×16点阵LED显示屏整个过程及C语言程序(1).

16×16点阵LED显示屏整个过程及C语言程序7.1功能要求设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。

图形或文字显示有静止、移入移出等显示方式。

7.2方案论证从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。

这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。

因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。

具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;……第十六行之后又重新燃亮第一行,这样反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。

采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。

显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。

显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。

基于单片机控制的LED点阵屏含设计报告电路原理图C语言程序

基于单片机控制的LED点阵屏含设计报告电路原理图C语言程序

基于单⽚机控制的LED点阵屏含设计报告电路原理图C语⾔程序课程设计LED显⽰屏的制作实验报告题⽬: 基于单⽚机的LED点阵屏设计院系名称:⼯业中⼼专业班级:D⾃集成学⽣姓名:宋云学号:指导⽼师:杨⽼师实验时间:6⽉10号——7⽉13号实验地点:实验楼⼀.实验任务本设计主要实现LED 点阵屏对⽂字或图形的显⽰,附加功能有LED 显⽰屏对时间及温度的实时显⽰,lcd 显⽰屏,以便硬件搭建时利于测试和调整。

编程时需要通盘考虑,本设计中⽤到的时钟芯⽚(DS1302),温度传感器(DS18B20)及LCD1602显⽰屏都需要驱动才能正常⼯作,由于这些驱动的头⽂件可以通⽤,就没有必要重新编写,这样⼀来就可以把主要精⼒放在主函数的编写上,编写主函数有两⼤⽅⾯,⼀是如何实现对LED 显⽰屏及外围器件的控制,⼆是如何把时钟芯⽚(DS1302),温度传感器(DS18B20)及LED 显⽰屏有机的结合起来。

⼆.实验⽅案利⽤单⽚机STC89S 52单⽚机作为本系统的中控模块。

单⽚机可把由ADC0832、DS 18B 20、DS 1302读来的数据利⽤软件来进⾏处理,从⽽把数据传输到显⽰模块,实现光照强度、温度、⽇历的显⽰。

点阵LED 电⼦显⽰屏显⽰器为主要的显⽰模块,把单⽚机传来的数据显⽰出来,并且可以实现滚动显⽰。

在显⽰电路中,主要靠按键来实现各种显⽰要求的选择与切换。

STC89S52led 显⽰屏光报警DS18B20 DS1302光照强度AD 转换器三.实验步骤1.显⽰部分LED显⽰屏具有其他显⽰屏所⽆法⽐拟的技术优越性,LED显⽰屏是集光电⼦技术微电⼦技术计算机技术视频技术为⼀体的⾼科技产品。

它的发光部分由LED (即发光⼆极管是英⽂Light Emitting Diode的缩写)拼装组成的,其特点是耗电量少亮度⾼、⼯作电压低、功耗⼩、微型化、易与集成电路匹配、驱动简单、寿命长、耐冲击、性能稳定。

显⽰屏⾯积可以根据需要由单元模块任意拼装,以其变化丰富的⾊彩,图案实时动态的显⽰模式,完美的多媒体效果,强⼤的视觉冲击⼒将信息、⽂字、图⽚、动画、视频等多种⽅式显⽰出来,成为信息传播的划时代产品,在铁路民航、体育场馆、会议厅、⾼速公路、⼴场、⼤型商场、证券市场以及多种监控调度中得到了⼴泛的应⽤[2]。

C语言程序设计-仿LED数码的显示

C语言程序设计-仿LED数码的显示

仿LED数码的显示一、使用说明用字母显示数字时,输入(数字,字母)例如:(3,a)二、问题描述与基本要求1.输入任意数字和一个字母,能够以该字母显示该数字,2.在此基础上使数码能从0到9动态变化。

(显示出0后,延时一会再显示1,再延时再显示2,…一次类推!)三、系统分析和设计1.以字母显示数字利用一些已经打印数码的函数,将其中的字符变量改成用户输入的,通过用户输入的数字来确定显示的数字。

(其中用到了开关语句)自定义函数为void digit_ala(int a ,char b)2.数码从0到9动态变化将打印数码的函数组合到一起,其中在加入延时函数(sleep())。

自定义函数为void count_down( char b )四、结构图五、流程图六、程序清单#include<stdio.h>#include <dos.h>int i,j;void pr1(char b);void pr2(char b);void pr3(char b);void pr4(char b);void a0(char b);void a1(char b);void a2(char b);void a3(char b);void a4(char b);void a5(char b);void a6(char b);void a7(char b);void a8(char b);void a9(char b);void pr1(char b){for(j=0;j<8;j++) printf("%c",b); printf("\n"); }void pr2(char b){ printf("%c",b);printf("\n"); }void pr3(char b){ for(j=0;j<7;j++) printf(" "); printf("%c",b);printf("\n"); }void pr4(char b){ printf("%c",b);for(j=0;j<6;j++) printf(" ");printf("%c",b);printf("\n"); }void a0(char b) /* 数字0 */ {pr1(b);for(i=0;i<7;i++) pr4(b);pr1(b);printf("\n"); }void a1(char b) /* 数字1 */ {for(i=0;i<9;i++) pr3(b);printf("\n"); }void a2(char b) /* 数字2 */{ pr1(b);for(i=0;i<3;i++) pr3(b);pr1(b);for(i=0;i<3;i++) pr2(b);pr1(b);printf("\n"); }void a3(char b) /* 数字3 */ { pr1(b);for(i=0;i<3;i++) pr3(b);pr1(b);for(i=0;i<3;i++) pr3(b);pr1(b);printf("\n"); }void a4(char b) /* 数字4 */ {for(i=0;i<4;i++) pr4(b);pr1(b);for(i=0;i<4;i++) pr3(b);printf("\n"); }void a5(char b) /* 数字5 */ {pr1(b);for(i=0;i<3;i++) pr2(b);pr1(b);for(i=0;i<3;i++) pr3(b);pr1(b);printf("\n"); }void a6(char b) /* 数字6 */ {pr1(b);for(i=0;i<3;i++) pr2(b);pr1(b);for(i=0;i<3;i++) pr4(b);pr1(b);printf("\n"); }void a7(char b) /* 数字7 */ { pr1(b);for(i=0;i<7;i++) pr3(b);printf("\n");}void a8(char b) /* 数字8 */ {pr1(b);for(i=0;i<3;i++) pr4(b);pr1(b);for(i=0;i<3;i++) pr4(b);pr1(b);printf("\n"); }void a9(char b) /* 数字9 */{ pr1(b);for(i=0;i<3;i++) pr4(b);pr1(b);for(i=0;i<3;i++) pr3(b);pr1(b);printf("\n"); }void digit_ala(int a ,char b) /* 将数字用字母表示*/ { switch ( a ){ case 0 : a0(b);break;case 1 : a1(b);break;case 2 : a2(b);break;case 3 : a3(b);break;case 4 : a4(b);break;case 5 : a5(b);break;case 6 : a6(b);break;case 7 : a7(b);break;case 8 : a8(b);break;case 9 : a9(b);break;}}void count_down( char b ) /* 倒计时*/ { a0(b);sleep(1);a1(b);sleep(1);a2(b);sleep(1);a3(b);sleep(1);a4(b);sleep(1);a5(b);sleep(1);a6(b);sleep(1);a7(b);sleep(1);a8(b);sleep(1);a9(b);}void main(){ int a,c;char b,d;void digit_ala(int a ,char b);void count_down( char b );printf("please enter a digit and a alapher:\n");scanf("%d,%c",&a,&b);do{printf(" 1. printf the digit with the alapher\n");printf(" 2. count down from 9 to 0\n");printf(" 1 or 2 ? \n");scanf("%d",&c);}while(!(c==1||c==2)) ; /* 有点问题?*/if(c==1){digit_ala(a,b); /* 一个函数将数字用字母表示出来*/sleep(1);printf("count down from 0 to 9 : Y or N ?\n");scanf("%c%c",&d,&d);switch ( d ){ case 'y' :case 'Y' : count_down(b);sleep(1);break;case 'n' :case 'N' : break;}}if(c==2){ count_down(b); /* 进行倒计时的函数*/sleep(1);}printf("press any key to exit.\n");getch();}七、小结及收获和体会C程序设计是一门重要的专业基础课程,是数据结构,操作系统,数据库原理和软件工程等后继课程的基础。

基于单片机的点阵汉字显示(附C语言程序).doc

基于单片机的点阵汉字显示(附C语言程序).doc

湖南科技大学测控技术与仪器专业单片机课程设计题目基于单片机的点阵汉字显示设计姓名学号指导教师成绩____________________湖南科技大学机电工程学院二〇一五年十二月制摘要LED显示屏在我们的周围随处可见,它的应用已经普及到社会中的方方面面。

作为一种新型的显示器件,在许多场合都可以见到它的身影,不仅是它的应用使呈现出来的东西更加美观,更重要的是它的应用方便,成本很低,除了能给人视觉上的冲击外,更能给人一种美的享受。

LED显示屏是由多个发光二极管按矩阵形式排列封装而成,通常用来显示时间、图文等各种信息。

本设计是基于STC89C51单片机的16*16点阵式显示屏,该LED显示屏能实现16*16个汉字,简单的显示图像, 然后一直循环着显示下去。

该设计包含了硬件、软件、调试等方案,只需简单的级联就能实现显示屏的拓展,但要注意不要超过负载能力。

本次设计的作品体积小、效用多、方便实用、花费小,电路具有结构简单、操作方便、精度高、应用广泛的特点。

关键词: LED,STC89C51单片机,显示屏目录摘要 (i)第一章系统效用要求 (1)1.1系统设计要求 (1)第二章方案论证 (1)2.1方案论证 (1)第三章系统硬件电路设计 (1)3.1 STC89C51芯片的介绍 (1)3.1.1 系统单片机选型 (1)3.1.2 STC89C51引脚效用介绍 (2)3.1.374LS595的总体特点和工作原理……………………………………3.2 LED点阵介绍 (2)3.2.1LED点阵 (2)3.3系统各硬件电路介绍 (3)3.3.1系统电源电路设计介绍 (3)3.3.2复位电路 (3)3.3.3晶振电路 (4)3.4系统的总的原理图 (4)第四章系统程序设计 (5)4.1基于PROTEUS的电路仿真 (5)4.2用PROTEUS绘制原理 (5)4.3PROTEUS对单片机内核的仿真 (6)第五章调试及性能分析 (6)5.1系统的调试 (6)参考文献 (7)附录 (7)第一章设计要求1.1 系统设计要求1.以STC89C51系列的单片机为核心器件;组成一个点阵式汉字显示屏。

基于汇编语言(含C)的单片机Led点阵显示.doc

基于汇编语言(含C)的单片机Led点阵显示.doc

基于汇编语言(含C)的单片机Led点阵显示8×8发光二极管点阵显示技术在8×8发光二极管点阵上显示一个柱状,允许它从左到右平滑移动三次,然后从右到左移动三次,然后从上到下移动三次,最后从下到上移动三次,如此循环。

电路原理图图4.24.1硬件电路连接(1)。

将“单片机系统”区域的P1端口连接到“点阵模块”区域的“DR1-DR8”端口,带8个内核。

(2)将“微控制器系统”区域中的P3端口连接到具有8个内核的“点阵模块”区域中的“DC1-DC8”端口。

程序设计内容(1)。

8×8点阵发光二极管的工作原理如下图所示,说明了8×8点阵发光二极管的结构。

从图4.24.2可以看出,8×8点阵总共需要64个发光二极管,每个发光二极管位于行线和列线的交点处。

当相应的列设置为1电平,相应的行设置为0电平时,相应的二极管将点亮。

因此,为了实现柱状照明方法,如图49所示,相应的列是垂直列,或者相应的列是水平列。

因此,实现柱照明的方法如下: 垂直列:扫描行时,相应的列设置为1。

水平栏:扫描列时,相应的行被设置为0。

汇编源程序org 00H start : no MOV 3,# 3lop23360movr4,# 8movr2,# 0lop1:movp1,# 0fffhmovdptr,# tabamova,r2 movca,@ adpmovp3,A INC R2 LCALL DELAY DJNZ R4,LOP1 DJNZ R3,LOP2 MOV R3,#3 LOP4: MOV R4,#8 MOV R2,# 7 LOP : MOV P1,#0FFH MOV R2 MOVC公司,@A DPTR MOV P1公司R2 LCALL DELAY DJNZ R4,LOP5 DJNZ R3,LOP6 MOV R3,#3 LOP8: MOV R4,#8 MOV R2,#7 LOP7: MOV P3,#00H MOV DPTR,#TABB MOV A,R2 MOVC A,@A DPTR MOV P1,A DEC R2 LCALL DELAY DJNZ R4,LOP7 DJNZ R3,LOP8 LJMP启动延迟3360 MOV R5 无符号字符代码tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x 80 };void delay(void) {无符号字符I,j;对于(i=10i0;(j=248j0;j-);} void delay1(void) {无符号字符I,j,k;对于(k=10k0;(i=20i0;(j=248j0;j-);} void main(void) {未签名char i,j;而(1) {对于(j=0;J3;j)//从左到右3次{对于(I=0;i8;㈠P3=塔巴·[一世;P1=0x ff;delay 1();} }对于(j=0;J3;j)//从右向左3次{对于(I=0;i8;I){ P3=塔巴·[7-I];P1=0x ff;delay 1();} }对于(j=0;J3;j)//从上到下3次{对于(I=0;i8;I){ P3=0x 00;P1=塔布·[7-I];delay 1();} }对于(j=0;J3;j)//从底部到顶部3次{对于(I=0;i8;I){ P3=0x 00;P1=塔布·[一世];delay 1();单词模型。

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮(C语言)

将0xfe赋给P1口,然后使用移位函数来改变P1口的值,达到流水灯的效果 移位函数: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 。 _crol_,_cror_: c51中的intrins.h库函数
程序如下:
随后会弹出一个对话框,要求选择单片机的型号。在该对话框中显示了Vision2的器件数据库,从中可以根据使用的单片机来选择。
PART ONE
AT89S52
8051 based Full Static CMOS controller with Three-Level Program Memory Lock, 32 I/O lines, 3 Timers/Counters, 8 Interrupts Sources, Watchdog Timer, 2 DPTRs(DATA POINTER REGISTERS ), 8K Flash Memory, 256 Bytes On-chip RAM 基于8051全静态CMOS控制器、 三级加密程序存储器 、 32个I/O口 、三个定时器/计数器 、八个中断源 、看门狗定时器、2 个数据指针 寄存器、8k字节Flash,256字节片内RAM
十六进制整常数
十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: 0X2A(十进制为42) 0XA0 (十进制为160) 0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数: 5A (无前缀0X) 0X3H (含有非十六进制数码)
各种进位制的对应关系
十进制
二进制
十六进制
十进制
二进制
十六进制
0
0
0
9
1001

大型双色点阵屏C语言程序

大型双色点阵屏C语言程序

大型双色点阵屏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个字的第一字节。

led用c语言面向对象描述

led用c语言面向对象描述

led用c语言面向对象描述LED(Light Emitting Diode,发光二极管)是一种半导体器件,能够将电能转化为光能,具有低功耗、长寿命、快速响应和抗震动等特点。

在现代电子产品中,LED已经广泛应用于指示灯、显示屏、照明等领域。

本文将用C语言面向对象的方法描述LED的特性和使用。

我们需要定义一个LED类,用于描述LED的属性和行为。

LED类可以包含以下成员变量:颜色(color)、亮度(brightness)、状态(state)。

颜色可以用一个字符串表示,亮度可以用一个整数表示(取值范围为0-255),状态可以用一个布尔值表示(开为true,关为false)。

接下来,我们可以定义一些方法来操作LED。

首先是打开(turnOn)和关闭(turnOff)方法,分别用于将LED的状态设置为开和关。

这两个方法都不需要返回值,只需要修改LED对象的状态属性即可。

其次是设置亮度(setBrightness)方法,用于设置LED的亮度。

这个方法需要一个整数类型的参数,用于指定亮度的值。

最后是设置颜色(setColor)方法,用于设置LED的颜色。

这个方法需要一个字符串类型的参数,用于指定颜色的值。

除了基本的属性和方法,LED类还可以定义一些特殊的方法,如闪烁(blink)。

闪烁方法可以让LED在一定时间间隔内循环地打开和关闭,以实现闪烁的效果。

闪烁方法可以接受一个整数类型的参数,用于指定闪烁的次数。

现在我们可以创建LED对象,并使用定义的方法对其进行操作。

首先,我们可以创建一个红色的LED对象,并将其状态设置为开。

然后,我们可以设置LED的亮度为128,表示中等亮度。

接下来,我们可以让LED对象闪烁10次,以实现闪烁效果。

最后,我们可以将LED的状态设置为关,完成LED的关闭。

以上就是使用C语言面向对象描述LED的过程。

通过定义LED类和相应的属性和方法,我们可以方便地操作LED对象,实现各种功能。

LED点阵显示与C语言编程(精)

LED点阵显示与C语言编程(精)

一、行扫描静态显示,用51单片机实现图3静态显示的程序如下:#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code TAB[]={0x81,0xFD,0xFD,0xC1,0xBF,0xBF,0xBD,0xC3};uchar i,t;delay(uchar t){while (t--){;}}void main(void){while(1){P2=0x01;for(i=0;i<8;i++){P1=TAB[i];delay(100);P2=P2<<1|P2>>7;}}}二、行扫描翻页显示字码取模方式为逐行第一次从字码数组中取出第1~8个数据置于列上,行扫描顺序为1~8行,显示一帧,第二次取第9~16个数据,行扫描顺序仍为1~8行,显示第二帧,第三次取第17~24个数据,……实现图4显示效果的程序如下:/*8X8行扫描,翻页显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code TAB[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏0xFD,0xF D,0xFD,0xFD,0xFD,0xFD,0xC1,0xFF, //L0xE3,0xDD, 0xDD,0xDD,0xDD,0xDD,0xE3,0xFF, //O0xDD,0xD D,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF, //V0xC1,00xFF,0xF F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏};uchar i,t;delay(uchar t){while (t--){;}}void main(void){ uchar N,T;while(1){for(N=0;N<6;N++) //循环扫描一遍6帧for(T=0;T<100;T++) //速度{P2=0x01;for(i=0;i<8;i++){P1=TAB[i+8*N];delay(100);P2=P2<<1|P2>>7;}}}}三、行扫描上下移动显示。

16215;16点阵led显示屏整个过程及c语言程序 (1)

16215;16点阵led显示屏整个过程及c语言程序 (1)

16×16点阵LED显示屏整个过程及C语言程序7.1功能要求设计一个室内用16×16点阵LED图文显示屏,要求在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形或文字应稳定、清晰无串扰。

图形或文字显示有静止、移入移出等显示方式。

7.2方案论证从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。

16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,16×16的点阵需要256/8=32个锁存器。

这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本将是一个很庞大的数字。

因此在实际应用中的显示屏几乎都不采用这种设计,而采用另一种称为动态扫描的显示方法。

动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如16行)的同名列共用一套列驱动器。

具体就16×16的点阵来说,我们把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其燃亮一定的时间,然后熄灭;再送出第二行的数据并锁存,然后选通第二行使其燃亮相同的时间,然后熄灭;……第十六行之后又重新燃亮第一行,这样反复轮回。

当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,我们就能看到显示屏上稳定的图形了。

采用扫描方式进行显示时,每行有一个行驱动器,各行的同名列共用一个列驱动器。

显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。

显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。

单片机C语言LED灯点亮程序完全版

单片机C语言LED灯点亮程序完全版

1例子1第二个灯亮#include<reg52.h>void main(){P1=0xfd;}#include<reg52.h>Sbit D1=P1^0;Void main(){D1=0}注意:稍微改程序时需重新hex化例子2第一个灯亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。

}例子3第一个灯亮#include<reg52.h> //52单片机头文件void main() //主函数{P1=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110 while(1); //程序停止在这里,在后面会讲到为什么这样写。

}2例子1第三个灯闪烁fir循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){D2=0;for(a=0;a<=10000;a++){};D2=1;for(a=0;a<=10000;a++){};}例子2第三个闪烁while循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){a=5000;D2=0;while(a--);a=5000;D2=1;while(a--);}2.#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为50000led1=0; //点亮灯while(i--); //延时i=50000;led1=1; //熄灭灯while(i--);}}3例子1 3 5 7灯同时亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明sbit led3=P1^2; //单片机管脚位声明sbit led5=P1^4; //单片机管脚位声明sbit led7=P1^6; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零led3=0; //将单片机P1.2口清零led5=0; //将单片机P1.4口清零led7=0; //将单片机P1.6口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。

基于单片机的点阵汉字显示(附C语言程序)资料

基于单片机的点阵汉字显示(附C语言程序)资料

湖南科技大学测控技术与仪器专业单片机课程设计题目基于单片机的点阵汉字显示设计姓名学号指导教师成绩____________________湖南科技大学机电工程学院二〇一五年十二月制摘要LED显示屏在我们的周围随处可见,它的应用已经普及到社会中的方方面面。

作为一种新型的显示器件,在许多场合都可以见到它的身影,不仅是它的应用使呈现出来的东西更加美观,更重要的是它的应用方便,成本很低,除了能给人视觉上的冲击外,更能给人一种美的享受。

LED显示屏是由多个发光二极管按矩阵形式排列封装而成,通常用来显示时间、图文等各种信息。

本设计是基于STC89C51单片机的16*16点阵式显示屏,该LED显示屏能实现16*16个汉字,简单的显示图像, 然后一直循环着显示下去。

该设计包含了硬件、软件、调试等方案,只需简单的级联就能实现显示屏的拓展,但要注意不要超过负载能力。

本次设计的作品体积小、功能多、方便实用、花费小,电路具有结构简单、操作方便、精度高、应用广泛的特点。

关键词: LED,STC89C51单片机,显示屏目录摘要 (i)第一章系统功能要求 (1)1.1系统设计要求 (1)第二章方案论证 (1)2.1方案论证 (1)第三章系统硬件电路设计 (1)3.1 STC89C51芯片的介绍 (1)3.1.1 系统单片机选型 (1)3.1.2 STC89C51引脚功能介绍 (2)3.1.374LS595的总体特点和工作原理..........................................3.2 LED点阵介绍 (2)3.2.1LED点阵 (2)3.3系统各硬件电路介绍 (3)3.3.1系统电源电路设计介绍 (3)3.3.2复位电路 (3)3.3.3晶振电路 (4)3.4系统的总的原理图 (4)第四章系统程序设计 (5)4.1基于PROTEUS的电路仿真 (5)4.2用PROTEUS绘制原理 (5)4.3PROTEUS对单片机内核的仿真 (6)第五章调试及性能分析 (6)5.1系统的调试 (6)参考文献 (7)附录 (7)第一章设计要求1.1 系统设计要求1.以STC89C51系列的单片机为核心器件;组成一个点阵式汉字显示屏。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、行扫描静态显示,
用51单片机实现图3静态显示的程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code TAB[]={0x81,0xFD,0xFD,0xC1,0xBF,0xBF,0xBD,0xC3};
uchar i,t;
delay(uchar t)
{
while (t--)
{;}
}
void main(void)
{
while(1)
{
P2=0x01;
for(i=0;i<8;i++)
{
P1=TAB[i];
delay(100);
P2=P2<<1|P2>>7;
}
}
}
二、行扫描翻页显示
字码取模方式为逐行
第一次从字码数组中取出第1~8个数据置于列上,行扫描顺序为1~8行,显示一帧,第二次取第9~16个数据,行扫描顺序仍为1~8行,显示第二帧,第三次取第17~24个数据,……
实现图4显示效果的程序如下:
/*8X8行扫描,翻页显示*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code TAB[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
0xFD,0xF D,0xFD,0xFD,0xFD,0xFD,0xC1,0xFF, //L
0xE3,0xDD, 0xDD,0xDD,0xDD,0xDD,0xE3,0xFF, //O
0xDD,0xD D,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF, //V
0xC1,0
0xFF,0xF F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
};
uchar i,t;
delay(uchar t)
{
while (t--)
{;}
}
void main(void)
{ uchar N,T;
while(1)
{
for(N=0;N<6;N++) //循环扫描一遍6帧
for(T=0;T<100;T++) //速度
{
P2=0x01;
for(i=0;i<8;i++)
{
P1=TAB[i+8*N];
delay(100);
P2=P2<<1|P2>>7;
}
}
}
}
三、行扫描上下移动显示。

如果是逐行取字模时,第一次从字码数组中取出第1~8个数据置于列上,行扫描顺序为1~8行,显示一帧,第二次取第2~9个数据,行扫描顺序仍为1~8行,显示第二帧,……如此便是向上移动。

如果将上述的行扫描顺序改为8~1行,就是向下移动,但显示的图像是倒立的了,为了使得它不倒立,详细请看程序。

另外取模方式不同,就有不同的编程方式。

上移效果的程序如下:
/*8X8行扫描,上移显示*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code
TAB[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
0xFD,0xF
0xE3,0xD D,0xDD,0xDD,0xDD,0xDD,0xE3,0xFF, //O
0xDD,0xD D,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF, //V
0xC1,0xF D,0xFD,0xC1,0xFD,0xFD,0xC1,0xFF, //E
0xFF,0xF F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
};
uchar i,t;
delay(uchar t)
{
while (t--)
{;}
}
void main(void)
{ uchar N,T;
while(1)
{
for(N=0;N<40;N++) //循环扫描一遍40帧
for(T=0;T<60;T++) //移动速度
{
P2=0x01;
for(i=0;i<8;i++)
{
P1=TAB[i+N];
delay(100);
P2=P2<<1|P2>>7;
}
}
}
}
下移效果的程序如下:
/*8X8行扫描,下移显示*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code
TAB[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
0xFD,0xFD, 0xFD,0xFD,0xFD,0xFD,0xC1,0xFF, //L
0xE3,0xD D,0xDD,0xDD,0xDD,0xDD,0xE3,0xFF, //O
D,0xDD,0xDD,0xDD,0xEB,0xF7,0xFF, //V
0xC1,0xFD, 0xFD,0xC1,0xFD,0xFD,0xC1,0xFF, //E
0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏
}; uchar idata Buffer[48]={0}; //缓存显示单元
uchar i,t;
delay(uchar t)
{
while (t--)
{;}
}
void main(void)
{
uchar N,T,m,n;
for(m=0;m<6;m++)
for(n=0;n<8;n++)
Buffer[8*m+n]=TAB[7-n+m*8]; //将TAB数组中的数据重新排列
//使得下移字母顺序不变
while(1)
{
for(N=0;N<40;N++) //循环扫描一遍6帧 for(T=0;T<70;T++) //速度
{
P2=0x80;
for(i=0;i<8;i++)
{
P1=Buffer[i+N];
delay(100);
P2=P2>>1|P2<<7; //扫描起始行为第一行
}
}
}
}
四、行扫描左右移动显示。

如果将扫描方式改为列扫描,那么左右移动的程序就容易写了,但当点阵比较巨大并且硬件已经定下时,改变扫描方式不是好方法,甚至不可能实现。

这里是以行扫描为例(逐行取字模),第一次取字码数组中的第1~8个数据到点阵列输入端,行码扫描1~8行。

第二次将第一次的 1~8个数据都循环左(右)移一位,并且将第9个数据的最高位移到第二次数据的最低处,再输入到列端口,行扫描1~8行。

即每次扫描都要把前一次扫描的列码左移一位。

左移效果,程序如下:
/*8X8行扫描,左移显示*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar 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;
while(1)
{
for(Q=0;Q<8;Q++)
for(T=0;T<100;T++) //速度
{
P2=0x01;
for(i=0;i<8;i++)
{
Y=TAB[i+1]*256+TAB[i];
Y=Y<<(7-Q)|Y>>Q;
P1=Y%256;
delay(60);
P2=P2<<1|P2>>7;
}
}
}
}。

相关文档
最新文档