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的电路,知道控制电平的管脚,同理也要搞清楚开关的电路。其次,设置开关的状态控制电平的高低,从而控制led灯的亮灭。最后,具体的执行办法,要看你是什么型号的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,电路结构。
点阵有分共阴和共阳的,还有得看你是行扫描和列扫描,硬件电路可以由串行控制和并行控制,如果单片机IO口够用的话,用并口是最简便的啦,如果是串行的,那可以欧诺个74HC154和74HC573,控制好移位数据就可以的了,不懂可以问我,
具体的LED显示屏控制电路如图1所示。整个电路由单片机89C52、点阵数据存储器6264、列驱动电路ULN2803、行驱动电路TIP122、移位寄存器4094及附属电路组成。该电路所设计的电子屏可显示10个汉字,需要40个8×8 LED点阵模块,可组成16×160的
用proteus仿真16×16的LED点阵屏,主要考虑点阵屏行,列数控制就行,不必考虑驱动,所以不必用MOS管。可用4块8×8点阵模块拼成。至于行列控制数据锁存可用74HC573比较好写程序。用74HC595也可以,只要能写出程序就行的。如下图
16×16的点阵共有256个发光二极管,显然单片机没有这么多端口,如果我们采用锁存器来扩展端口,按8位的锁存器来计算,1 6×16的点阵需要256/8=32个锁存器。这个数字很庞大,因为我们仅仅是16×16的点阵,在实际应用中的显示屏往往要大
基于51单片机的16×16点阵屏流动显示目录一,制作所需器材二,STC89C52简介三,点阵的简介四,程序五,演示六,总结一.制作所需器材1.单片机开发扳一块;2.16*16LED点阵一块;3.杜邦线若干;返回二.STC89C52简介STC89C52是S
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
基于51单片机的16x16 led点阵显示屏设计原理与电路图
//移位时钟脉冲 ---接板卡上的SPOsbit RCK_595 =P1^7; //输出锁存器控制脉冲 ---接板卡上SPKsbit CS_LED8 =P1^1; //数码管片选 ---接板卡上的CSsbit CS_1302 =P1^4; //ds1302片
你好:在void set(void)里少了P2的设置.在下面的循环中,n=0和n=7时,显示相同,所以 点阵第一行总是不对,可能同第8行相同.可在n=7后加延时,以错开循环到n=0时,P2,P1的值.for(n = 0; n < 8; n++){ P2=
1. 程序设计内容 8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,
include
移动速度调整y循环的次数。动态扫描一般是用定时中断来做的,你这个程序简单这样凑合着用也行。
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-
单片机 8*8点阵C51程序
1 设计思路 AT89C52是一个低电压,高性能CMOS 8位单片机, 可以用来做单片机流水灯、跑马灯。。。等实验 电路原理图见下图1,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口的电平变为低电平就可以了;相反
defeine uchar unsigned char uchar temp;void delay(uchar);void main(){ temp=0xfe;P1=temp;while(1){ delay(10);temp=_crol_(temp,1);P1=temp;} } void delay(uchar z){ uchar x,y;for(x=z;x>0;x--
1、新建项目,如图所示。2、添加头文件,创建延迟函数。3、创建C主函数。4、添加死循环效果。5、点亮LED灯。P1=0x7e;二进制11111110。6、添加延迟效果即可。注意事项:Proteus 自从有了单片机也就有了开发系统,随着单片机的
下载文件:计算器_20130927085344.rar|给你一个我做的简易计算器的吧,汇编和C的都有,随便选
但是若将LED点阵的行列端口全部直接接入89S5 1单片机,则需要使用32条I/0口,这样会造成I/0口资源的耗尽,系统也再无扩充的余地。因此,我们在实际应用中只是将LED点阵的16条行线直接接在P0口和P2口,至于列选扫描信号则是由4—16线译
用proteus仿真16×16的LED点阵屏,主要考虑点阵屏行,列数控制就行,不必考虑驱动,所以不必用MOS管。可用4块8×8点阵模块拼成。至于行列控制数据锁存可用74HC573比较好写程序。用74HC595也可以,只要能写出程序就行的。如下图
如何用89C51和595和MOS管,设计一个16*16个LED点阵的控制电路 用KEIL和Proteus
1、一片AT89S51单片机2、由4个8*8点阵LED模块组成一个16X16点阵LED3、4个按键开关(功能预留)4、一个REST手动复位按键 注意:本电路板耗电较大,正常工作时LM7805稳压器比较烫手,有条件的客户可以加装散热器或者直接用5V/1A开关电源供电
上面的连接是5744的datasheet 把四个都用上吧,你那个138译码器是用来选择那个574工作的 你需要做的就是用单片机控制四个574管子工作输出,就那么简单 输出-锁存-输出-锁存不断的刷新,一个汉字就出来了 如果你想确保
仿真实例 供参考
这是1602电路,和时钟电路。元件基本差不多。电路如图 include
如果只有8*8的话只需要一个单片机,单片机复位基本电路,晶振基本电路,供电电源,一个点阵屏 原理图大概就是那样,画的不好,时间仓促,单片机和点阵加个座,用完可以回收。如果用其他芯片驱动的话,可以用595和138,这样
1、编写程序,用8255的PA口控制8X8点阵的行;8255的PC口控制8X8点阵的列;显示字符。2、按图连接线路;运行程序,观察实验结果,学会控制LED点阵显示字符。四、实验原理图 五、实验步骤 1、主机连线说明:B4区:CS(8255)
急需:求单片机80S51实训(带汇编程序) 题目要求:8乘8点阵显示 需原理图和器材清单
见下图这个问题不是很难! 我的理解是楼主可能只用单片机和点阵模块来实现,这需要单片现来做动态扫描。 首先需要你把点阵上要显示图形的代码写出来,即每种图形每行显示的数据,每个图形有8行数据,即占8个字节的空间! 如果楼主用51单片机来实现的话,可以使用P0口输出行数据,P1口作为点阵的行扫描控制。 其次要用按键控制,只需你把每种图形以不同的表存起来,再做一个按键扫描程序,当检测到有键按下时,把动态扫描的表头地址更换即可!
已发送,希望能帮到你
1个51就够了,595作为列驱动,154行驱动。
avr的静态点阵 #include unsigned char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //控制低电平 unsigned char b[]={0xff,0x18,0x18,0xff,0x18,0x18,0x18,0xff}; //控制高电平 void delay(unsigned int cnt) { while(--cnt); } void main(void) { int i=0,n=0; DDRA=0xFF; DDRB=0xFF; while(1) { for (i=0;i<8;i++) { PORTA=a[i]; PORTB=b[i]; delay(300); } } } AVR的动态点阵 #include unsigned char a[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //列高电平控制端 unsigned char b[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //行低电平控制端 0x7e,0x76,0x76,0x00,0x00,0x76,0x76,0x7e, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; void delay(unsigned int cnt) { while(--cnt); } void main(void) { int i=0,n=0,k=0; DDRA=0xFF; DDRB=0xFF; while(1) { for(k=0;k<16;k++) { for(n=0;n<50;n++) { for (i=0;i<8;i++) //i循环8次进去下个语句 { PORTA=a[i]; PORTB=b[i+k]; delay(50); } } }
8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。 不知道你要实现什么样的显示,不过基本方法是一样的。我这有一个现成的8*8的程序,你可以根据这个去修改: 在8X8点阵LED上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。(要实现一根柱形的亮法:一根竖柱,对应的列置1,而行则采用扫描的方法来实现。 一根横柱,对应的行置0,而列则采用扫描的方法来实现。) 汇编源程序: ORG 00H START: NOP MOV R3,#3 LOP2: MOV R4,#8 MOV R2,#0 LOP1: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,@A+DPTR MOV P3,AINC R2 LCALL DELAY DJNZ R4,LOP1 DJNZ R3,LOP2 MOV R3,#3 LOP4: MOV R4,#8 MOV R2,#7 LOP3: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,@A+DPTR MOV P3,A DEC R2 LCALL DELAY DJNZ R4,LOP3 DJNZ R3,LOP4 MOV R3,#3 LOP6: MOV R4,#8 MOV R2,#0 LOP5: MOV P3,#00H MOV DPTR,#TABB MOV A,R2 MOVC A,@A+DPTR MOV P1,A INC 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 START DELAY: MOV R5,#10 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABA: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH TABB: DB 01H,02H,04H,08H,10H,20H,40H,80H END C51语言源程序 #include unsigned CHAR code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned CHAR code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void DELAY(void) { unsigned CHAR i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); } void DELAY1(void) { unsigned CHAR i,j,k; for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); } void main(void) { unsigned CHAR i,j; while(1) { for(j=0;j<3;j++) //FROM left to right 3 time { for(i=0;i<8;i++){ P3=taba[i]; P1=0xff; DELAY1();} } for(j=0;j<3;j++) //FROM right to left 3 time { for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; DELAY1();}} for(j=0;j<3;j++) //FROM top to bottom 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; DELAY1();}} for(j=0;j<3;j++) //FROM bottom to top 3 time { for(i=0;i<8;i++) { P3=0x00; P1=tabb[i]; DELAY1();}} } }
最简单的就是将32个IO全用上,然后按照连接顺序编写显示程序就可以了,加群131843360交流吧
请提供LED型号
#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); } } } 您复制进去试一下,不行再追加吧,谢谢
这要看是几位数码管,是开发板新烧录的程序,那就看看显示程序是不是循环扫描显示的。最好发个截图看一下是什么样。
把点阵图形的代码存于表格中,一次取一个数,反复显示即可。