导航:首页 > 操作系统 > 51单片机点阵教程

51单片机点阵教程

发布时间:2023-01-19 23:28:44

‘壹’ c51单片机怎么用不连续的IO点亮点阵,求大神指点

51的IO很特别,属于SFR,不能直接或者间接寻址,所以不能像寄存器那样随意调换顺序。要么在定义的时候修改,要么使用以个接口函数,在接口函数中实现IO的兑换,这个函数可以接受参数什么的,可以做的比较人性化。

‘贰’ 51单片机如何储存LED点阵屏显示的图案并且可以实现调用出来,求程序

首先你要确定点阵的大小,黑白(单色)点阵一个 点占一位二进制数据,128*128点占16*128个字节,即2K。用专门的软件将图形转化成十六进制数据,存储于表格中,显示时再一个一个读出,进行显示。
点阵显示屏有的是一个点一个点写入,有的是一行一行(或半行)写入,程序当然是不一样的。

‘叁’ 求助c51单片机的点阵实现程序!

#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;
}
}

‘肆’ 51 单片机 74HC595 级联 点阵是怎样实现的

74HC595有4个端口很重要:串行输入端、时钟输入端、使能端和串行输出端。如果要级联,那么就是上一级的输出端接下一级的输入端,时钟和使能端分别共用。这样就可以多个级联在一起了。那么点阵显示就是8个位的数据端+n个公共端。如果是两个74HC595级联就是8×8点阵,如果是3个级联就可以是8×16点阵,也就是说一个74HC595做数据端,其他74HC595做公共端控制。然后就是点阵显示,可以串行输出数据接着再串行输出公共端控制(具体看点阵的接法),关键是先数据和公共端都输出后再做使能控制,这样就可以防止串行动作时出现显影。

‘伍’ 单片机 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文档在我的空间里面

‘陆’ 51单片机点阵..只用三个端口,接两个74LS164,两个164输出端接8*8点阵

不知道你说的三个端口是指的PA,PB,PC这样的端口。还是三条IO。
如果是三个P口的话那就有3*8=24条IO 随便你怎么使用

补充楼上所说:
164是串入并出,你可以将第二片的输入脚接到第一片的最后一个输出,让两片级联。
这样你就可以只用两条线了,一条串行数据线,一条数据移位线
但是想要点亮点阵的一个点需要两个8位数据,8*8一块64个点,所以一屏图像需要8*8*2*8=1024个时钟序列。如果再考虑24帧的话1024*24=24576,主频就应该选用1/(24576*12)*10^6=3.4MHZ至少

‘柒’ 51单片机点阵问题,总是乱码

好象是滚动显示中间的8个代码看看阴码阳码是否搞错,行列是否搞错
delay(1000);不知你是多大的延时,要是1000ms可有点大,100ms以下还差不多
扫描一次才花费16ms,中间你敢停1000ms吗?
个人认为,这个延时太小了会无滚动效果,太大了会造成其它行很暗、而只有最后一行很亮的情况
所以,干脆去掉这个延时,而将每一次扫描重复5-7次,也就是80-110ms,然后再i++,将图像向上推进
就是在for(z=0;z<8;z++)外面再加一层for循环
for(m=0;m<10;m++)//m值由实验确定
{
for(z=0;z<8;z++)
{
c=i+z;
DULA=1;
P1=HANG[z];
DULA=0;
delay(1);
WELA=1;
P1=LIE_2[c];
WELA=0;
delay(1);
}
}
另外8*8点阵显示效果不会很好,特别是点与点之间的空隙太大,有时不仔细看,还真看不出显的是什么东东

‘捌’ 51单片机 点阵问题

左移:处理的是P0 P2口的数据 154是行扫面,就不用更改了。给该行数据就可以了,可以定义一个2字节的变量,用C语言直接左移就可以了(x<<=1;)再将这个变量强制转换位单字节的数据,输出给两个P口。
右移的道理和左移一样,只是方向相反就可以了。

下移:和上移就简单了,上移就是数组开始的2个 2个字节的去掉,后面填上0X00/0XFF。就是第一幅画面不读取数组的1 2字节,后面填上2个空白的字节,第2幅画面的 1 2 3 4字节都不读取,后面填上4个字节的空白。因为一幅画面的字节数是固定了,你只要该数据就可以了。

‘玖’ 51单片机教程,要通俗易懂版的

我是一名多年的单片机工程师,下面的51单片机教程学习方法你参考一下

1 首先了解单片机的硬件结构。

2 掌握很基本的数电模电知识,如二进制、十进制、十六进制之间的转换,与、或、非逻辑关系等。

3 熟悉5个基本语句的运用,如:if while for switch/case do-while,讲真的,如果你不懂太多术语,if while for已经可以满足你的日常实验需要,我个人有体会。

4 熟悉上面的就可以从简单的实验入手,把更多的C语言附带术语学上,越积累越多,渐渐变成单片机高手。

5 如果你想学习更多单片机和程序的知识,可以看看我整理好的“17个实验学会单片机”,网络一下“17个实验学会单片机”就可以看到在首页了,从零开始打造一个单片机高手。

6 学单片机靠的是多玩实验,不能三天打鱼两天晒网,只要坚持就会看到希望。如果不坚持,就很难学会,如果坚持,几个月后的单片机就已经很厉害了。加油,祝你成功!

阅读全文

与51单片机点阵教程相关的资料

热点内容
android获取窗口大小 浏览:178
程序员为世界带来的贡献 浏览:214
程序员招聘自荐信 浏览:693
魔兽键位设置命令宏 浏览:645
程序员没有目标了 浏览:828
抢答器c程序编程 浏览:703
什么app可以自己玩 浏览:76
刨客app是什么 浏览:963
cad输入命令栏不见了 浏览:834
做故事集可以用什么app 浏览:692
qq邮箱发送压缩包 浏览:672
程序员桌面机器人 浏览:589
xjr快速开发平台源码 浏览:159
java接口runnable 浏览:31
python怎么运行web服务器 浏览:349
notepad编程代码 浏览:740
什么安卓的毛病最少 浏览:611
hp的pjl设备访问命令 浏览:635
googlewebp图片压缩技术 浏览:215
tbc萨满加血宏命令 浏览:757