一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-
stc89c52rc单片机按键控制点阵变换图片,首先保证点阵可以分别显示出几幅图片。其实,显示的每一幅图片都是一组数据,保存为一维数组。那多幅图片,可以按二维数组来保存。假设数组为,pic[5][32],为5幅图片,每幅图片为32
首先需要你把点阵上要显示图形的代码写出来,即每种图形每行显示的数据,每个图形有8行数据,即占8个字节的空间!如果楼主用51单片机来实现的话,可以使用P0口输出行数据,P1口作为点阵的行扫描控制。其次要用按键控制,只
P1=tabb[7-i];delay1();} } for(j=0;j<3;j++) //frombottomtotop3time { for(i=0;i<8;i++){ P3=0x00;P1=tabb[i];delay1();}
if(key==0){ delayms(20);if(key==0)flag++;while(key==0);} if(flag==3) flag=0;if(flag==0){ for(i=0;i<8:i++){ P0=table1[i] ;P1=table0[i] ;delayms(2);} } if(flag==1){
CJNE A,#0EEH,NE2;;;将A中的数据与键值表对比,不同则跳到下一个对比 MOV A,#0;;;将输出显示数据送到寄存器 JMP KEYEND;;;跳出对比程序 NE2:CJNE A,#0EDH,NE3;;;1 MOV A,#1 JMP KEYEND NE3:CJN
用一按键切换8*8点阵图形显示三幅图, 要有代码和仿真图,求大佬帮忙, 是单片机,用AT89C51
把LED灯在电路板上拼成一个笑脸图案就可以了。把LED的负极连在一起接到电源负极,搭建一个三极管共射电路,LED的正极连在一起经过一个适当阻值的电阻接到三极管共射电路的输出端,三极管的控制端---基极接单片机的IO口,
你的程序没有问题的,估计是,你的程序与你的开发板上74HC595的引脚不符吧。下图是根据你的程序画的仿真图,程序没有变,只是把显示的图形数据变了一下,显示出菱形。u8 code duanled[]= { /*-- 调入了一幅图像:这
基于51单片机的16×16点阵屏流动显示目录一,制作所需器材二,STC89C52简介三,点阵的简介四,程序五,演示六,总结一.制作所需器材1.单片机开发扳一块;2.16*16LED点阵一块;3.杜邦线若干;返回二.STC89C52简介STC89C52是S
http://wenku.baidu.com/view/aa7092dbd15abe23482f4df6.html 51单片机LED点阵屏显示设计 http://wenku.baidu.com/view/c81be9eb19e8b8f67c1cb99b.html 89c51单片机控制的LED点阵显示系统+Keil C源程序 http://wenku
下面是8×8的LED点阵程序,参考一下吧 include
51单片机如何储存LED点阵屏显示的图案并且可以实现调用出来,求程序?
这个程序验证过,你可以参考试试://---//8*8矩阵循环显示字符和数字//显示字符串在数组disstr[]中申明//---#include
EA = 1; //使能总中断 ENLED = 0; //使能U4,选择LED点阵 ADDR3 = 0;TMOD = 0x01; //设置T0为模式1 TH0 = 0xFC; //为T0赋初值0xFC67,定时1ms TL0 = 0x67;ET0 = 1; //使能T0中
1、熟悉8255的功能,了解点阵显示的原理及控制方法;2、学会使用LED点阵,通过编程显示不同字符;3、认真预习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。二、实验设备 STAR系列实验仪一套、PC机一台
1.首先用字模提取软件提取“大”字的字模。软件网上很多,用“字模提取”关键字可以搜到。也可以用EXCEL在8x8上方框上自己写一个“大字”,然后有标记的为1,没标记的为0,那么一行下来有8位既一个节,总共8行,共8个字
uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};uchar i=0,j=0,t=0,Num_Index,key,xi,yi;sbit we1=P1^1;sbit we2=P1^3;//主程序 void main(){ //P1=0x80;Num_Index=0; //
1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-
1. 程序设计内容 8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,
51单片机Led点阵8*8显示一个字的程序是什么 ?请讲讲程序内容里的原理!谢谢
1、汉字取模 汉字取模,即把汉字对应16x16点阵的图形用16进制数来描述,形成可以用于驱动显示的数据。例如下图,的汉字“中”该字的16x16点阵图形中,每行有16个像素,可以编码为2个字节,每8个像素,对应一个字节的
DJNZ R4,SCAN8 MOV R4,#16 DJNZ R3,SCAN16 AJMP END16 SCAN16:MOV A,R2 CLR C SUBB A,#32 MOV R2,A AJMP START END16:INC DPTR INC DPTR MOV A,R2 CLR C SUBB A,#32 MOV R2,A MOV A,R0 MOV R3,A
首先,从Proteus元件库中找到“MATRIX-8X8-RED”元器件,并将四块该元器件放入Proteus文档区编辑窗口中。此时需要注意,如果该元器件保持初始的位置(没有转动方向),我们要首先将其左转90°,使其水平放置,那么此时它的左面
51单片机驱动1616LED点阵显示动画汉字(汇编程序)http://wenku.baidu.com/view/a1a08f05cc1755270722085a.html 基于51单片机控制的LED点阵显示屏(c 语言)http://wenku.baidu.com/view/aa7092dbd15abe23482f4df6.html 51单片
16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,1 6×16的点阵需要256/8=32个锁存器。这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大
跪求16X16LED点阵汉字显示的原理图,s51单片机汇编源程序,汉字字摸提取工具,可扩展64X16点阵显示。
你的主程序就是亮一个点,void hc595(u8 dat)程序没有错。要亮一列,只改主程序的一行,hc595(0xff);//1111 1111,这才是亮一列的,全为1,全亮,而P0=0x7f;//0111 1111 ,是0有效,只选一列。下图,就是
void delay1(void){ unsigned char i,j,k;for(k=8;k>0;k--)for(i=10;i>0;i--)for(j=15;j>0;j--);} main(){ unsigned int i;while(1){ for(i=0;i<8;i++){ P2=taba[i];P0=tabb[i];dela
2、控制器按照需要显示的数字、字母、符号等的编码,依次控制每个LED的点亮或熄灭,从而显示出所需的内容。3、由于点阵数码管的每个LED都是独立控制的,因此可以显示各种复杂的图形和动画效果。
程序没问题就是硬件跟人家的不一样了,单片机程序是与硬件密切相关的,硬件变了,相同的程序未必还管用,一般地得做相应改动
单片机上电复位都是高电平,你的数码管或者点阵应该是高电平驱动的。。。你看看你的驱动电路是不是NPN型的三极管。。假如是NPN的,就是上电全亮
您好,这种情况可能是由于电路中的某些元件或线路出现了问题。您可以尝试检查以下几个方面:1. 检查电源是否正常,是否有电压波动等问题。2. 检查单片机的时钟频率是否正确,是否与数码管和流水灯的工作频率相匹配。3. 检查数
为什么我的51单片机点阵数码管显示爱心图形,而是全亮
单片机驱动LED灯的源程序:include
P0 = 0xc0;//点亮前两个发光二极管P0.0和P0.1;delay(1000);//延时1秒 P0 = 0x30;//点亮第三个和第四个LED delay(1000);P0 = 0x0c;delay(1000);P0 = 0x03;} } 二、include
KC24W-600(X1X2X3) 5.5-48 600 96 21.6 22.10*12.55*9.1 RoHS 模拟调光+PWM调光 KC24W-700(X1X2X3) 5.5-48 700 96 25.2 22.10*12.55*9.1 RoHS 模拟
sbit led2 = P2^1;sbit led3 = P2^2;sbit led4 = P2^3;sbit led5 = P2^4;sbit led6 = P2^5;sbit led7 = P2^6;sbit led8 = P2^7;void main(){ int i,j;//点亮第一个灯 led1 = 1;led2 =
proteus仿真按理来说是不可能达得到效果的,因为这种仿真得有非常快的处理速度。我刚动手试了下和自己的想法相同,LED只会间断的闪烁。我是用AVR单片机,用51也是一样的。我这个程序也在实物试过效果很好。演示定时器1的快
把LED灯在电路板上拼成一个笑脸图案就可以了。把LED的负极连在一起接到电源负极,搭建一个三极管共射电路,LED的正极连在一起经过一个适当阻值的电阻接到三极管共射电路的输出端,三极管的控制端---基极接单片机的IO口,
急求,51单片机万能LED灯。(显示一个笑脸图案的)1,电路图,2,编程程序,3,电路结构。
#include #define uint unsigned int #define uchar unsigned char uchar count ,z; sbit key_1 = P3^7; sbit key_2 = P3^6; sbit PWM = P2^0; void key_control(); void init (); void create_PWM(uchar); void delay(uint); void main () { init (); while(1); { key_control(); create_PWM(count); } } void delay(uint z) { uint x,y; for(x = z;x>0;x--) for(y = 110;y>0;y--); } void init() { TMOD = 0x10; TH1 = (65536-4608)/256;//50sm TL1 = (65536-4608)%256; TR1 = 1; } void create_PWM(uchar count) { static i; if(TF1 == 1) { TF1 = 0; TH1 = (65536-4608)/256;//50sm TL1 = (65536-4608)%256; i++; if(i == 100) i=0; if(i <= count) PWM = 1; else PWM = 0; } } void key_control() { if(key_1 ==0) { delay(10); if(key_1 == 0) { count+= 5; if(count >= 100)count = 0; } } if(key_2 ==0) { delay(10); if(key_2 ==0) { count-= 5; if(count <= 0)count =100; } } }#include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x){ uchar i; while(x--) { for(i=0;i<120;i++); } }// 主程序 void main() { uchar i; while(1) { P2=0x01;//此处有改 for(i=0;i<7;i++) { P2=_crol_(P2,1); //P2 的值向左循环移动 DelayMS(150); } P2=0x80;//此处有改 for(i=0;i<7;i++) { P2=_cror_(P2,1); //P2 的值向右循环移动 DelayMS(150); } } } 您复制进去试一下,不行再追加吧,谢谢
这要看是几位数码管,是开发板新烧录的程序,那就看看显示程序是不是循环扫描显示的。最好发个截图看一下是什么样。
把点阵图形的代码存于表格中,一次取一个数,反复显示即可。
由于单片机没有停机指令,所以可以设置系统程序不断的循环执行上述显示效果。总结本文设计的一个室内用16x16的点阵LED图文显示屏,能够在目测条件下LED
行列扫描显示。。。找个原理图很简单啊,程序也不难。
8*8也就能显示字符,显示汉字比较吃力。 #include #include #define uchar unsigned char #define uint unsigned int uchar code Table_of_Digits[]= { 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7 0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8 0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, //9 0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff }; uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar i=0,j=0,t=0,Num_Index,key,xi,yi; sbit we1=P1^1; sbit we2=P1^3; //主程序 void main() { //P1=0x80; Num_Index=0; //从0 开始显示 TMOD=0x01; //T0 方式0 TH0=(65536-2000)/256; //2ms 定时 TL0=(65536-2000)%256; IE=0x82; key=0; xi=0; yi=0; EX0=1; IT0=1; TR0=1; //启动T0 while(1); } //T0 中断函数 void ext_int0() interrupt 0 { key++; key&=0x03; } void LED_Screen_Display() interrupt 1 { TH0=(65536-2000)/256; //2ms 定时 TL0=(65536-2000)%256; switch(key) { case 0: P0=0xff; we1=1; P0=~Table_of_Digits[Num_Index*8+i]; we1=0; P0=0xff; //输出位码和段码 we2=1; P0=xdat[i]; we2=0; if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0; if(++Num_Index==10) Num_Index=0; //显示下一个数字 } break; case 1: we1=1; P0=~xdat[xi]; we1=0; we2=1; P0=ydat[yi]; we2=0; if(++t==250) //每个数字刷新显示一段时间 { t=0; yi++; if(yi>7){yi=0;xi++;} if(xi>7)xi=0; } break; case 2: we1=1; P0=0x00; we1=0; P0=0xff; //输出位码和段码 we2=1; P0=xdat[i]; we2=0; if(++t==250) //每个数字刷新显示一段时间 { if(++i==8) i=0; //每屏一个数字由8 个字节构成 t=0; } break; default: key=0; i=0; j=0; t=0; xi=0; yi=0; Num_Index=0; we1=1; P0=0xff; we1=0; we2=1; P1=0x80; we2=0; break; } }
介绍了一款以单片机AT89S51为控制器的LED点阵显示屏系统的设计。该系统可实现中英文字符的显示和动态特效显示。并且可以通过级连的方式来扩大显示屏幕的尺寸以达到增加显示内容的目的。系统采用PC机作为上位机,上位机向单片机发送控制命令和上位机所存储的显示代码,AT89S51单片机接收并处理PC 机的控制命令以及显示代码,由显示驱动模块驱动一个16×16分辨率的LED点阵显示屏的扫描显示。PC机与单片机之间的通信采用RS—232C通信标准来实现。所选用的AT89S51单片机具有价格低廉程序写入方便的特点使得整个系统方便维护和检修。除此之外,该系统只占用了单片机少量的I /O口和内存,为系统留下了功能扩展的空间。
51和led点阵一般要用到动态扫描的方式,也就是显示的画面不是一下子就把整个画面的内容全部显示出来,而是逐行显示的,只不过显示的频率超过了50HZ 甚至更高,所以我们看起来是“不晃眼”的。也就是说,屏幕显示是由行显示组成的(即子程序)。行显示再细分就是有位显示组成,不过行显示就不用逐位显示了。其实行显示就是串入并出,即行显示是一下子就显示出来的。 我给你传一份资料你参考一下。。。。。。
将显示的内容制成三个表:table1[]={。。。。。。。} table2[]={。。。。。。。} table3[]={。。。。。。。} 另将显示的列制成1个表:table0[]={0x80,0x40,0x20,0x01,0x08,0x04,0x02,0x01} 申请一个变量flag,计按键状态 ,按下按键 flag加1 然后根据flag的值,查不同的表,进行显示 if(key==0) { delayms(20); if(key==0)flag++; while(key==0); } if(flag==3) flag=0; if(flag==0) { for(i=0;i<8:i++) { P0=table1[i] ;P1=table0[i] ;delayms(2);} } if(flag==1) { for(i=0;i<8:i++) { P0=table2[i] ;P1=table0[i] ;delayms(2);} } if(flag==2) { for(i=0;i<8:i++) { P0=table3[i] ;P1=table0[i] ;delayms(2);} }
提示: CLK分频+(0-8的加法器)+译码器,实现位选