四个字,这办不到的。至少要用16X16的点阵才能显示出汉字。8*8的点阵只能显示0~9的数字。如果是仿真显示,就用4个8*8的点阵组成一个显示屏,也很简单的。要是实物开发板,那就无法显示了。仿真的效果如下:

8*8点阵是动态扫描的 静态显示也是动态扫描的结果。比如说下面这个程序:include include "74HC595.H"unsigned char code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code b[]

代码如下:include defineuintunsignedint defineucharunsignedchar//宏定义 sbitkey1=P0^0;//定义键盘IO口 sbitkey2=P0^1; // sbitbeep=P2^3;sbitkey3=P0^2;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,

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-

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

要用8×8的LED点阵显示数字0~9,先用proteus 画出仿真图,然后用取模软件画出数字8×8点阵图形,并按行取模,每个数字共8个字节数据,显示时取出字模并逐行扫描就行了。

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=(

点阵的 48 列数据线驱动由 6 片 74HC595 级联组成,前一片 74HC595 的 Q’H 引脚连接下一片的SI引脚,各片的SCK、RCK、SRCLR、G引脚分别并联。 (2)LED点阵块 图三LED点阵块 8*8的LED点阵为单色行共阴模块,单点的工作电压为正向

使用的单片机仿真试验仪型号为DP-51PRO以下的程序是在8x8led显示频上显示一个心形我需要将它移动起来CLKEQUP3.2DINAEQUP3.3DINBEQUP3.4CLEAREQUP3.5org0000hajmpmainorg0100hmain:mov 使用的单片机仿真试验仪型号为DP-51PRO以下的程

一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GRE

delay1();} } }

设计一个用于51单片机的8x8的单色点阵LED驱动程序使,显示一个心形,在Proteus上仿真 求大神

8*8的显示与数码管的显示原理一样,上图显示一个数字“1”,行线对应是P0,列线对应P2,显示的原理就是【 假定P0接了上拉电阻,P0为高P2为低是,点阵全亮】P2=0XFF;//关所有显示 P0=0X00;P2.0=0;DELAY();P2

当p1 = 0xff; p2 = 0xfe的时候,就是P2.0那个小灯点亮,其他7个灭,p2 = 0xfe的这个F就是8+4+2+1 =15,对应16进制里的f, 同理E=8+4+2+0 =14,对应16进制里的e。闪烁的话需要用到定时器,时间到了

ff转换成二进制是11111111,而1111转换成10进制为15,15是第16个数,就代表16进制里面的f,如果要让一盏灯亮其他都暗(高电平亮),0x80,也就是二进制的1000 0000,要把二进制快速转换成16进制的话 分为4个二进制分别

从图看出第三行是0010 0100,所以应该是24H,你说的3E应该是第三列数据:0011 1110,所以是3EH

用单片机控制8×8点阵的每个LED的亮灭,要采用扫描方式实现。如下图的8×8点阵,用8系列线和8线条行线控制。在8条列线加高电平,逐条行线加低电平,就会逐行点亮。

怎么控制单片机8*8点阵每个点亮或不亮,每个点对应的十六进制是多少?

i<8;i++){ P0=TAB[i];delay(100); //加大延时,看慢动作可理解点阵的是如何显示的 d=d<<1|d>>7;P0=0xff; // 消隐,很重要,不加要红一片 out164(d);} } } 你的图怎么有P28脚???标错了吗?

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}; //列高电平控制端 unsigne

下面是源代码:/***8*8LED点阵屏显示***/ include void delay(int z) //延时函数 { int x,y;for(x=0;x

单片机8*8点阵(0~F十六进制数字,可做成8*8图形)仿真实例。)LED EQU P3;;;LED灯显示定义 KEY EQU P1;;;键盘接口定义 TIME EQU 30H CNTA EQU 31H CNTB EQU 32H ;---程序入口定义 ORG 0000H JMP START;

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

uchar b[8]= {0x10,0xFE,0x92,0x92,0xFE,0x92,0x10,0x10}; //字模 /***延时***/ void Delayms(unsigned int n){ unsigned int i,j;for(j=n;j>0;j--)for(i=112;i>0;i--);} /***/ voi

在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左 平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次如此循环下去。include unsignedcharcodetaba[]={0xfe,0xfd,0xf

求单片机8*8点阵简单图案源代码。

define uint unsigned int sbit Led=P1;void delay(void);void main(void){ unsigned char tmp,i;P1=0x00;//全熄灭 while(1){ for(i=0;i<8;i++)//左移 { tmp=0x01;tmp=(tmp<

void main(){ uchar a,temp;temp=0xfe;for (a=8;a>0;a--)//循环8次,即流水灯8个循环8次即可点亮8个 { P1=temp;temp=_crol_(temp,1);//移动 delay(100);} temp=0x7f;//注意这一句,如果没有这一句,

3 当软件计数器减到0时,表示0.5秒时间到 这时可以判断开关状态 开关合上 可以让8个LED左移一位 开关断开 可以让8个LED右移一位 呵呵 按上诉算法 编写程序 就可以实现你的要求(指导可以见百度知道的消息

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

在8X8 LED 点阵上显示柱形,让其先从左到右平滑移动1次,其次从右到左 平滑移动1次,再次从上到下平滑移动1次,最后从下到上平滑移动次,如此循环下去。LED显示原理:显示某一个点时,列值设为1,行值设为0即可

//定义一个无符号字符型局部变量 i 取值范围 0~255 Delay(50000); P1=0xfe;      //赋初始值 for(i=0;i8;i++)  //加入 for循环,表明for循环大括号中的程序循环执行8次

当实现循环左移时,将a[i+1]的值赋给a[i];将a[0]赋给a[7];当然说的不大清楚 给你个例子:define LEDPORT P1 unsigned char a[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};unsigned char i =

单片机程序8x8led点阵显示心形并实现左移右移的程序

每屏显示时,列控制码左(右)移,就可实现点阵屏左(右)移动。 以显示“ | ” 从右向左移为例,第1 屏,右边第1 列亮1ms后灭,第2 屏,第2 列亮。。。。8 屏显示后,完成“| ”左移。
#include sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; unsigned char code image[11][8] = { {0xC3, 0x81, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3}, //数字0 {0xEF, 0xE7, 0xE3, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3}, //数字1 {0xC3, 0x81, 0x9D, 0x87, 0xC3, 0xF9, 0xC1, 0x81}, //数字2 {0xC3, 0x81, 0x9D, 0xC7, 0xC7, 0x9D, 0x81, 0xC3}, //数字3 {0xCF, 0xC7, 0xC3, 0xC9, 0xC9, 0x81, 0xCF, 0xCF}, //数字4 {0x81, 0xC1, 0xF9, 0xC3, 0x87, 0x9D, 0x81, 0xC3}, //数字5 {0xC3, 0x81, 0xF9, 0xC1, 0x81, 0x99, 0x81, 0xC3}, //数字6 {0x81, 0x81, 0x9F, 0xCF, 0xCF, 0xE7, 0xE7, 0xE7}, //数字7 {0xC3, 0x81, 0x99, 0xC3, 0xC3, 0x99, 0x81, 0xC3}, //数字8 {0xC3, 0x81, 0x99, 0x81, 0x83, 0x9F, 0x83, 0xC1}, //数字9 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //全亮 }; void main() { EA = 1; //使能总中断 ENLED = 0; //使能U4,选择LED点阵 ADDR3 = 0; TMOD = 0x01; //设置T0为模式1 TH0 = 0xFC; //为T0赋初值0xFC67,定时1ms TL0 = 0x67; ET0 = 1; //使能T0中断 TR0 = 1; //启动T0 while (1); } /* 定时器0中断服务函数 */ void InterruptTimer0() interrupt 1 { static unsigned char i = 0; //动态扫描的索引 static unsigned int tmr = 0; //1s软件定时器 static unsigned char index = 9; //图片刷新索引 TH0 = 0xFC; //重新加载初值 TL0 = 0x67; //以下代码完成LED点阵动态扫描刷新 P0 = 0xFF; //显示消隐 switch (i) { case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index][0]; break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index][1]; break; case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index][2]; break; case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index][3]; break; case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index][4]; break; case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index][5]; break; case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index][6]; break; case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index][7]; break; default: break; } //以下代码完成每秒改变一帧图像 tmr++; if (tmr >= 1000) //达到1000ms时改变一次图片索引 { tmr = 0; if (index == 0) //图片索引10~0循环 index = 10; else index--; } }
用51单片机8*8点阵显示出“生日快乐”四个字,这办不到的。至少要用16X16的点阵才能显示出汉字。8*8的点阵只能显示0~9的数字。如果是仿真显示,就用4个8*8的点阵组成一个显示屏,也很简单的。要是实物开发板,那就无法显示了。 仿真的效果如下:
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); } } }
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); } } }
#include #define uint unsigned int #define uchar unsigned char uint i,j,num,aa; uchar code table12[]={ 0x04,0x82,0xff,0x80, 0xe2,0x91,0x89,0xc6}; uchar code table13[]={ 0x18,0x3c,0x7c,0xf8, 0x7c,0x3c,0x18,0x00}; void delay(uint); void main() { while(1) {for(aa=100;aa>0;aa--) {for(num=0;num<8;num++) { P2=num; P0=table12[num]; delay(2); } //delay(300); }; for(aa=100;aa>0;aa--) {for(num=0;num<8;num++) { P2=num; P0=table13[num]; delay(2); } //delay(300); } } } void delay(uint z) { for(i=z;i>0;i--) for(j=110;j>0;j--); }
首先你要搞清楚点阵显示原理。 8*8点阵要显示一个画面,通常采用扫描的形式。点阵内部发光阵列每一行的阴极连在一起,引出一条共阴线;每一纵向阳极连在一起,引出一条共阳线。这样8*8点阵就共有8条共阴线和8条共阳线。具体请参考点阵内部结构示意图! 扫描的过程:例如将共阳线作为扫描线,即每次给其中一条阳线供电,其它阳线断电。这样,在该条阳线上的LED点亮与否就取决于8条阴线的电平高低了。快速地扫描阳线,并且每扫描一条就给阴线变化相应的电平,就实现了一组图像的显示。 在你给的程序中,很明显的 tabP2是用来形成扫描输出的。你自己分析一下这些值每次是不是只发生了0这个值的移位。这是采用查表法来得到扫描功能的,每次让IO口(一组)输出这表中的一个值,最终就形成了扫描动作。至于tabP0就是对应于每一个扫描线输出的心形数据表了。每次扫描IO输出 tabP2的一个值,对应数据IO输出tabP0的一个值。 至于你说的“还有8X8点阵图中接口P23,P25,LP04,LP06,其中的LP04,LP06是不是指单片机的P04和P06接口啊?”我个人认为你应该自己有能力对这等电路进行分析了,不要一味只是单纯复制制作。只有自己尝试了解,以后才能做出更具特色的东西而不会仅仅停留在心形显示。
上拉电阻和三极管都是为了提高单片机的输出能力。你确认程序写的没问题吗?只亮一个灯?那灯的亮度又如何?
将显示的内容制成三个表: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的加法器)+译码器,实现位选