Ⅰ 单片机汉字点阵屏怎么写暂停
单片机汉字点阵屏写暂停:读写时序,这个要小心,一般液晶控制芯片的时序分为8080,6800,根据规格书写出读写子程序,我们在写液晶程序时有时候没有显示,程序检查半天发现是读写子程序错误。
有闪烁,可能是时间太慢,扫描次数不够。每显示一个字,无论自上而下,还是从做到右,都是在利用欺骗眼睛的原理完成的。你一个字尽量多刷几次,每次的时间短一点,刷新频率高点(针对一个字)。两个字之间的间隔长一点。
地址寄存器AR:
地址寄存器用于保存当前CPU所要访问的内存单元或I/O设备的地址。由于内存与CPU之间存在着速度上的差异,所以必须使用地址寄存器来保持地址信息,直到内存读/写操作完成为止。
显然,当CPU向存储器存数据、CPU从内存取数据和CPU从内存读出指令时,都要用到地址寄存器和数据寄存器。同样,如果把外围设备的地址作为内存地址单元来看的话,那么当CPU和外围设备交换信息时,也需要用到地址寄存器和数据寄存器。
Ⅱ 单片机 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单片机LED点阵屏有灯不亮怎么办
可进入调试模式,在执行22句后,检查595数据,看看其输出是不是 0xaa,在执行23句后,检查P0口数据,看看是不是 0x7f;
Ⅳ 单片机怎么在点阵屏上交替显示日月两个字
要显示汉字,最小的点阵数是16×16,这也是汉字库中最少的点阵数。如果只是显示日月两个字,用16×16的点阵屏倒是可以同时显示出来,因为合起来是明字,只要比明字中的日月适当大点就行。当然这样不标准。那可以交替分别显示两个字也很容易的。可设定显示一个字的时间,比如每个字显示一秒或更多,根据需要设定。方法是取出两个字的模,定义成二维数组,下标分别为x、y,x为0、1,代表日、月两个字,y=0~31,为每个字的字模数据。定时器按x循环即可分别显示日月两个字了。
Ⅵ 51单片机 点阵屏滚动显示姓名首字母
摘要 #include "csb.h"
Ⅶ 51单片机做点阵屏的问题,64行 16列,采用行扫,但显示的时候,画面总是跳动闪烁,我是在Proteus 7上模拟
^_^,我以前做个一个类似的项目,经验认为一般每一行使用1~2ms就可以了,也就是说实际应用中20ms内完成一个周期一般是没有问题的,频率太高,显示会变暗,频率太低就会闪烁,下面是部分代码,原程序还有一个红外遥控输入程序的:
/********************show****************************************************/
void trasmit(unsigned char byte,unsigned char bit_count){
unsigned char tmp;
tmp=bit_count;
byte<<=3;
clock=0;
for(;tmp>0;tmp--) {
// while(tmp--){
if (byte&0x80)wdata=1;
else wdata=0;
clock=1;_nop_();clock=0;
byte<<=1;
}
rdata=0;
rdata=1;_nop_();rdata=0;
}
/*****************************************************************************/
void show0(unsigned char y){
unsigned char i;
wdata=1;
for(i=0;i<y;i++){
clock=1;
clock=0;
}
rdata=1;
rdata=0;
}
/***************************************************************/
void display(void){
unsigned char k,row,bit_cnt;
iout=0x01;
for(row=0;row<7;row++)
{
bit_cnt=5;
for(k=0;k<9;k++){
if(show_letter[k]>127)show_letter[k]=_NUL;//
temp_data[k]=letter[show_letter[k]][row];
}
SCAN_PORT=0xff;
for(k=0;k<9;k++)
{
if(!int_f){
if(k==8)bit_cnt=bit_step_temp;
trasmit(temp_data[k],bit_cnt);
}
else if(k==8 && !brake_f){
if(right_flag|left_flag)trasmit(temp_data[k],bit_cnt);
}
else {
if(brake_f)show0(40);
else trasmit(temp_data[k],bit_cnt);
}
if((brake_f1|right_flag|left_flag| k==8) && REVERSE_S);
else show0(1);
}
if(right_flag|left_flag){
show0(2);
}
//if(brake_f1)show0(5);
SCAN_PORT=~iout;
//if(brake_f)SCAN_PORT=0xff;
// if(brake_f)
DelayMs(4);
iout=iout<<1;
SCAN_PORT=0xff;
}
}
/***************************************************************************/
Ⅷ 单片机 怎么控制点阵屏和LCD屏
LED点阵屏和LCD屏的显示原理是不同的,LCD屏是自带的驱动芯片的,可以和单片机直接连接的。
而LED屏需要加驱动电路的,而且显示时也要采用动态扫描的方式的。
LCD屏显示汉字时,有的屏是自带字库的,不带字库的屏,就要用汉字取模软件取出显示的数据,即取出汉字的字模。
LED屏显示汉字,就必须用取模软件来取模了,不是自己像画画那样,那可画不起。取模软件在网上可以下载的。
最后一个问题:LCD的集成电路去了当成点阵屏用吗?这是不可能的,一则LCD的集成电路是封装在PCB板上的,即软封装的,自己是用不了的,是不可能自己接线的。二则,假如能接线,可是,LCD和LED显示原理不同,是根本不可能通用的。
举个例子吧,你能把你家的私家车挂在高铁的车头拉着跑吗?
Ⅸ 基于单片机led点阵屏的设计需要用到哪些知识
ABSTRACT II
第1章 前言 1
1.1 LED电子显示屏概述 1
1.3 LED显示屏的应用示例 2
第2章 显示原理及控制方式分析 3
2.1 LED点阵模块结构 3
2.2 LED动态显示原理 4
2.3 LED常见的控制方式 4
第3章 方案设计与分析 7
3.1 显示单元 7
3.2 滚屏的实现 7
3.3 关于可扩展性 7
3.4 微控制器的考虑 7
3.5 关于点阵数据的存储方式 8
3.6 关于显示内容的更新 9
3.7 总体电路结构及工作原理 9
3.7.1 硬件电路框图 9
3.7.2 工作原理 11
第4章 硬件电路设计 13
4.1 显示单元电路设计 13
4.1.1 LED点阵模块的选择 13
4.1.2 列驱动电路设计 13
4.1.3 行驱动电路设计 14
4.2 单片机控制系统电路设计 15
4.2.1 单片机的选型 15
4.2.2 单片机系统电路设计 16
4.3 字库与单片机的接口设计 17
4.3.1 字库芯片选型 17
4.3.2 字库芯片的使用方法 17
4.3.3 字库芯片的电气特性 18
4.3.4 字库芯片与单片机的接口设计 19
4.3.5 字库芯片3.3V电源设计 20
4.3.6 5V-3.3V的电平转换电路设计 20
Ⅹ 课程设计:单片机的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;
}
}