Ⅰ 用keil51单片机C语言编写程序,使液晶显示器显示16*16点阵汉字,请问怎么编写,谢谢!
#include"at89x51.h"
unsigned char code led[]={0x10,0x04,0x10,0x03,0xD0,
0x00,0xFF,0xFF,0x90,0x00,
0x18,0x1D,0xF7,0x13,0x14,
0x11,0x54,0x15,0x94,0x19,
0x14,0x51,0x14,0x91,0xF6,
0x7F,0x04,0x11,0x00,0x01,
0x00,0x00,
0x04,0x04,0x04,0x02,0x04,
0x01,0xC4,0xFF,0x3F,0x00,
0x04,0x20,0x04,0x10,0x04,
0x08,0xE4,0x3F,0x04,0x42,
0x1F,0x41,0x84,0x40,0xC4,
0x40,0x06,0x40,0x04,0x70,
0x00,0x00};
unsigned char i=0,j=0,time_50ms=0;
delay();
main()
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
TR0=1;
ET0=1;
EA=1;
while(1)
{
P1=i;
P2=led[32*j+2*i];
P3=led[32*j+2*i+1];
delay();
i++;
if(i==16)
i=0;
if(time_50ms==20)
{
time_50ms=0;
j++;
if(j==2)
j=0;
}
}
}
int_T0() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
time_50ms++;
}
delay()
{
unsigned char t1;
for(t1=0;t1<100;t1++);
}
Ⅱ 51单片机Led点阵8*8显示一个字的程序是什么 请讲讲程序内容里的原理!谢谢
在8X8点阵LED上显示柱含卜形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。
1. 程序设计内容
8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对陆老镇应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:早粗
一根竖柱:对应的列置1,而行则采用扫描的方法来实现。
一根横柱:对应的行置0,而列则采用扫描的方法来实现。
Ⅲ 关于51单片机16*64LED点阵左移程序~~高手进~~~~
这不仅仅是简单的移位,我也做过,你生成字型码的时候是横着扫描吗?如果是,移位也会横向,如果不是,移位的话会乱码。存放字型码的最好是Uchar code,这样占用数据空间会减小。你移位的时候用中间变量和指针进行操作。
还有,你扫码方式,我做的是1/4行扫。你的如果是逐行扫描就不太一样 了。
Ⅳ 如何用51单片机设计16*128点阵的LED显示器
1:Dais-PG206试验箱,这是教学用的,应该是你们学校的实验仪器,建议你到枝带实验室了解一下。2:16×16点阵就是256个LED发光二极管集成在一块上,16个脚接高电平16脚通过限流电阻接地,通电就亮,原理很简单。3:通信原理这个定义很广泛,不过用在你的设计上用VB6.0做上位机通信程序,那必须得用到“串口通信”,做这个设计了解这个协议就足够了,这个通讯协议肯定比你想的要简单。4:16×16点阵要显示汉字,一直亮着很耗电,为了节约能源用单片机循环点亮的方式猛雀芦,大概一秒钟点亮12次以上,人眼看到的基本就是一直亮的状态,原理就是这样,至于怎么实现,你可以在网上下一个C程序,自己读一遍(如果你会的话,程序不会很长,真想学的话找个人教你1天就能读懂那个程序)。5:键盘程序在网上找很多,原理就是判断单片机引脚的电平状态,别忘了加防抖程序。6:整个岁携系统的原理弄明白了,电气图自然就会画了。开题报告:谈谈现在广告屏的现状,以后的发展趋势,本系统的大概说明字数不用太多补充一句:毕业设计是在学校最后一次学习的机会,好好珍惜吧,即使一点不会最好还是硬着头皮自己做,以后受益匪浅,祝你好运!
Ⅳ 求助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;
}
}