㈠ 怎么控制单片机8*8点阵每个点亮或不亮,每个点对应的十六进制是多少
用单片机控制8×8点阵的每个LED的亮灭,要采用扫描方式实现。如下图的8×8点阵,用8系列线和8线条行线控制。在8条列线加高电平,逐条行线加低电平,就会逐行点亮。
㈡ C51单片机如何用二维数组让88点阵显示汉字
发愤图强兴大业 勤劳致富建小康 横批:科技致富
㈢ 求单片机8*8点阵简单图案源代码。
在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左 平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次如此循环下去。
#include<AT89X52.H>
unsignedcharcodetaba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedcharcodetabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
voiddelay(void)
{
unsignedchari,j;
for(i=10;i>0;i--)
for(j=248;j>0;j--);
}
voiddelay1(void)
{
unsignedchari,j,k;
for(k=10;k>0;k--)
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
voidmain(void)
{
unsignedchari,j;
while(1)
{
for(j=0;j<3;j++) //fromlefttoright3time
{
for(i=0;i<8;i++)
{
P3=taba[i];
P1=0xff;
delay1();
}
}
for(j=0;j<3;j++) //fromrighttoleft3time
{
for(i=0;i<8;i++)
{
P3=taba[7-i];
P1=0xff;
delay1();
}
}
for(j=0;j<3;j++) //fromtoptobottom3time
{
for(i=0;i<8;i++)
{
P3=0x00;
P1=tabb[7-i];
delay1();
}
}
for(j=0;j<3;j++) //frombottomtotop3time
{
for(i=0;i<8;i++)
{
P3=0x00;
P1=tabb[i];
delay1();
}
㈣ 单片机8×8点阵简单显示程序
这个显示程序其实非常简单,因为这个是点正髓的话,可以用单片机里面去进行测量的。
㈤ 单片机 8*8点阵C51程序
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:
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-RED。
在这里请牢记:红色的为上列选下行选;其它颜色的为上行选下列选!而所有的点阵都是高电平选中列,低电平选中行!也就是说如果某一个点所处的行信号为低,列信号为高,则该点被点亮!此结论是我们编程的基础。
2.在选择完以上三个元件后,我们开始布线,具体如下图:
这里P2是列选,P3连接38译码器后作为行选。
选择38译码器的原因:38译码器每次可输出相应一个I/O口的低电平,正好与点阵屏的低电平选中行相对,并且节省了I/O口,大大方便了我们的编程和以后的扩展。
3.下面让我们把它点亮,先看一个简单的程序:
(将奇数行偶数列的点点亮,效果如下图)
下面是源代码:
/************8*8LED点阵屏显示*****************/
#include<reg51.h>
void
delay(int
z)
//延时函数
{
int
x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void
main()
{
while(1)
{
P3=0;
//行选,选择第一行
P2=0x55;
//列选,即该行显示的数据
delay(5);
//延时
/*****下同*****/
P3=2;
//第三行
P2=0x55;
delay(5);
P3=4;
//第五行
P2=0x55;
delay(5);
P3=6;
//第七行
P2=0x55;
delay(5);
}
}
上面的程序实现了将此8*8点阵的奇数行偶数列的点点亮的功能。重点让我们看while循环内,首先是行选P3=0,此时38译码器的输入端为000,则输出端为01111111,即B0端为低电平,此时选中了点阵屏的第一行,接着列选我们给P2口赋0x55,即01010101,此时又选中了偶数列,紧接着延时。然后分别对第三、五、七行进行相同的列选。这样就点亮了此点阵屏奇数行偶数列交叉的点。
完成这个程序,我们会发现其实点阵屏的原理是如此简单,和数码管的动态显示非常相似,只不过换了一种方式而已。
对不起啦,我传了三次图片都没传上,郁闷哪!希望你能理解哈!
不过我有传一份WORD文档在我的空间里面
㈥ 单片机汉字8x8点阵LED动态显示程序
#include <reg52.h>
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单片机 汇编语言 88点阵显示英文字母 逐个显示
LED点阵的核心原理跟4位LED数码管一样,都是需要行列扫描的。仔细查一下点阵的管脚,不是顺序排列,把字体做成数组,直接把数组一个一个字节的发送到端口上(你没有说明P0和P2那个是行,那个是列,其中一个直接发,一个是按位发)。不断的发送会导致点阵刷新,速度够快的话,效果就出来了
㈧ 用单片机88点阵显示3个汉字 ,怎样一秒钟显示一个字,三个字循环显示 ,程序如下,为什么3个字间时间间隔
你按你的程序去看就知道了,你写完一屏就delay(500);再写下一字。这样肯定不行。
点阵要显示字符的话,要不停的去刷新它,不能只写一屏的啊。
void main()
{
uchar i,j;
while(1)
{
for(j=0;j<8;j++){
for(i=0;i<8;i++){
P2=table1[i];
P0=table2[i];
delay(20);
}
}
for(j=0;j<8;j++){
for(i=0;i<8;i++){
P0=table3[i];
P2=table4[i];
delay(20);
}
}
for(j=0;j<8;j++){
for(i=0;i<8;i++){
P2=table5[i];
P0=table6[i];
delay(20);
}
}
}
}
你自己去调一下j的值就行了。
㈨ 课程设计:单片机的8乘8LED点阵显示屏的设计
#include<reg51.h>
#include<intrins.h>
#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;
//主程序
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; //输出位码和段码
P0=~Table_of_Digits[Num_Index*8+i];
P1=_crol_(P1,1);
if(++i==8) i=0; //每屏一个数字由8 个字节构成
if(++t==250) //每个数字刷新显示一段时间
{
t=0;
if(++Num_Index==10) Num_Index=0; //显示下一个数字
}
break;
case 1:
P0=~xdat[xi];
P1=0xff;
P1=ydat[yi];
if(++t==250) //每个数字刷新显示一段时间
{
t=0;
yi++;
if(yi>7){yi=0;xi++;}
if(xi>7)xi=0;
}
break;
case 2:
P0=0xff; //输出位码和段码
P0=~Table_of_Digits[80+j];
if(j==0)P1=0x80;
P1=_crol_(P1,1);
if(++j==8) j=0; //每屏一个数字由8 个字节构成
break;
default:
key=0;
i=0;
j=0;
t=0;
xi=0;
yi=0;
Num_Index=0;
P0=0xff;
P1=0x80;
break;
}
}
㈩ C51单片机如何用二维数组让88点阵显示汉字
也跟 那个数码管一个原理的
把写好的字段码 放数组里面
先去吧 显示原理 搞明白 这个的话 看不懂 别来问!
然后 两个FOR循环 大循环0~7自增 内嵌一个 段码【0~7自增】 :这是8*8 单个的点阵了
你所说的 是要16*16才有能力显示汉字的吧 是这样的 你如果也像上面这样的话一个字就用了整个 48个端口了 你 考虑用 两个4-16 译码器来节省一下端口 方法吗 你看懂上面一个下面这个方法看不懂的话 我就不说什么了 也不要找我! 看不懂上面 一个 的话 可以找我!
我就 不懂了 一楼 明明不会 又没有说 有多少分 楼主 一看 没多少人回答 给个辛苦的这种
二是 你说 他是灌水 又不像这辛辛苦苦 的 偏偏要坐要坐这个沙发!