文档库 最新最全的文档下载
当前位置:文档库 › 12864液晶屏与单片机连接图

12864液晶屏与单片机连接图

12864液晶屏与单片机连接图
12864液晶屏与单片机连接图

程序部分:

#include

#define uchar unsigned char

#define uint unsigned int

//sbit databus=P1;

#define databus P1

//sbit Reset = P3^0; //复位

sbit rs = P3^7; //指令数据选择

sbit e = P3^5; //指令数据控制

sbit cs1 = P3^3; //左屏幕选择,低电平有效

sbit cs2 = P3^4; //右屏幕选择

sbit wr = P3^6; //读写控制

//sbit busy = P1^7; //忙标志

void SendCommand(uchar command); //写指令

void WriteData(uchar dat);//写数据

void LcdDelay(uint time); //延时

void SetOnOff(uchar onoff);//开关显示

void ClearScreen(uchar screen); //清屏

void SetLine(uchar line); //置页地址

void SetColum(uchar colum);//置列地址

void SetStartLine(uchar startline);//置显示起始行

void SelectScreen(uchar screen);//选择屏幕

void Show1616(uchar lin,uchar colum,uchar *address);//显示一个汉字

void InitLcd(); //初始化

void ResetLcd(); //复位

void Show_english(uchar lin,uchar colum,uchar *address);

const uchar code hzk[] = {

/*-- 文字: I --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/*-- 文字: --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: c --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,

/*-- 文字: a --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,

/*-- 文字: n --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,

/*-- 文字: --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: m --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,

/*-- 文字: a --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,

/*-- 文字: k --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,

/*-- 文字: e --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,

/*-- 文字: --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: i --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/*-- 文字: t --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,

/*-- 文字: !--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: 我--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x80,0x90,0xF0,0x48,0x40,0x7F,0xC0,0x20,0x24,0xA8,0x00,0x00,0x00,0x00, 0x08,0x08,0x04,0x14,0x3F,0x02,0x09,0x08,0x05,0x06,0x09,0x10,0x20,0x78,0x00,0x00,

/*-- 文字: 的--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0xC0,0x60,0x50,0x2C,0xE0,0x80,0x40,0xA0,0x38,0x26,0x10,0xF0,0x00,0x00,0x00, 0x00,0x07,0x19,0x09,0x08,0x1F,0x00,0x00,0x00,0x03,0x10,0x20,0x1F,0x00,0x00,0x00,

/*-- 文字: 未--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x80,0x80,0x90,0x90,0xFF,0xC8,0x48,0x48,0x40,0x40,0x00,0x00,0x00,0x00,

0x10,0x10,0x08,0x04,0x02,0x01,0x7F,0x00,0x01,0x02,0x04,0x08,0x18,0x10,0x10,0x00,

/*-- 文字: 来--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x80,0x80,0xA8,0xC8,0x88,0xFF,0x84,0x64,0x54,0x40,0x40,0x00,0x00,0x00,0x00, 0x00,0x10,0x10,0x08,0x04,0x02,0x7F,0x01,0x02,0x04,0x0C,0x08,0x08,0x08,0x08,0x00,

/*-- 文字: 不--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x08,0x08,0x08,0x88,0x48,0xE4,0x14,0x8C,0x84,0x04,0x04,0x04,0x00,0x00,

0x00,0x04,0x04,0x02,0x01,0x00,0x00,0x3F,0x00,0x00,0x00,0x01,0x03,0x06,0x00,0x00,

/*-- 文字: 是--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x80,0x80,0x82,0x9E,0xAA,0xAA,0xA1,0x5D,0x43,0x40,0x00,0x00,0x00,0x00, 0x20,0x20,0x10,0x08,0x06,0x04,0x08,0x1F,0x12,0x22,0x22,0x20,0x20,0x20,0x20,0x00,

/*-- 文字: 梦--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x90,0x50,0x30,0xFE,0x28,0x48,0x28,0x18,0xFF,0x14,0x24,0x24,0x40,0x40,0x00, 0x00,0x00,0x40,0x48,0x44,0x26,0x2B,0x12,0x0A,0x06,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: !--*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };

void main()

{

uchar i,line,colum/*,j */;

uchar *address ;

InitLcd();

while(1)

{

/*显示第一行*/

/**********************************

下面这段程序用来卷页

**********************************/

/* line=0;

for(j=0;j<4;j++)

{

ClearScreen(2);//清屏

line=line+1;

colum=0;

address=hzk;

SetOnOff(1);

for(i=0;i<14;i++)

{

if(i<8)

{

SelectScreen(0);

Show_english(line,colum,address);

address+=16;

colum+=8;

}

else if(i>=8)

{

if(i<13)

{

SelectScreen(1);

Show_english(line,colum,address);

address+=16;

colum+=8;

}

else

{

Show1616(line,colum,address);

address+=32;

colum+=16;

}

}

}

for(i = 0;i < 50;i ++) //延时

LcdDelay(3000);

} */

line=1; //开始从第2页(第9行)开始显示,

colum=0; //开始从第一列开始显示

address=hzk;//给地址指针赋初值

SetOnOff(1);//显示开,注意:如果这里设置显示关,显示会出现错误

for(i=0;i<14;i++)//设置要显示的字符个数

{

if(i<8) //i<8时,在左半屏显示(因为每半屏最多只能显示8个英文字符即4个汉字)

{

SelectScreen(0); //选择左屏

Show_english(line,colum,address);//显示一个英文字符

address+=16; //每个英文字符需要16个十六进制数表示

colum+=8; //每个英文字符占8列

}

else if(i>=8) //当i>8时(当然最多只能是16)在右屏显示

{

if(i<13) //本程序第一行前13个字符为英文字符,最后一个字符为中文字符,英文字符和中文字符必须分开显示

{

SelectScreen(1);

Show_english(line,colum,address);

address+=16;

colum+=8;

}

else //显示中文字符“!”

{

Show1616(line,colum,address);//显示一个汉字

address+=32; //每个汉字要用32个16进制表示

colum+=16; //每个汉字占16列

}

}

}

/*显示第二行*/

/****显示原理与第一行完全相同,这里不再赘述了****/ line=4;

colum=1;

SetOnOff(1);

for(i=0;i<8;i++)

{

if(i<4)

{

SelectScreen(0);

Show1616(line,colum,address);

address+=32;

colum+=16;

}

else

{

SelectScreen(1);

Show1616(line,colum,address);

address+=32;

colum+=16;

}

}

SetOnOff(1);

for(i = 0;i < 50;i ++) //延时

LcdDelay(30000);

if(colum>63)

colum=0;

}

}

/**********************************

延时函数

**********************************/

void LcdDelay(uint time)

{

while(time--);

}

/**********************************

写指令

**********************************/

void SendCommand(uchar command)

{

e=1;

wr=0;

rs=0;

databus=command;

e=0;

}

/**********************************

写数据

**********************************/

void WriteData(uchar dat)

{

e=1;

wr=0;

rs=1;

databus=dat;

e=0;

}

/**********************************

显示开/关

**********************************/

void SetOnOff(uchar onoff)

{

if(onoff==1)

{

SendCommand(0x3f);

}

else

{

SendCommand(0x3e);

}

}

/**********************************

选择页

**********************************/

void SetLine(uchar line) //12864总共有8页(0~7),每页有8行

{

line=line&0x07; //只取后三位xxxx x111 ,这3个是要改变位置的数据line=line|0xb8; //页设置的固定格式

SendCommand(line);

}

/**********************************

选择列

**********************************/

void SetColum(uchar colum) //12864每半屏有64列(0~63),分为左右2屏{

colum=colum&0x3f; //xx11 1111,这个是要改变Y位置的数据

colum=colum|0x40; //固定格式

SendCommand(colum);

}

/**********************************

选择起始行

**********************************/

void SetStartLine(uchar startline)

{

startline=startline&0x3f;//xx11 1111,这个是要改变x位置的数据

startline=startline|0xc0;//11xxxxxx,是起始行设置的固定指令

SendCommand(startline);

}

/**********************************

选择左右屏0:左屏,1:右屏,2:全屏

**********************************/

void SelectScreen(uchar screen)

{

switch(screen)

{

case 0:

cs1=0;

LcdDelay(2);

cs2=1;

LcdDelay(2);

break;

case 1:

cs1=1;

LcdDelay(2);

cs2=0;

LcdDelay(2);

break;

case 2:

cs1=0;

LcdDelay(2);

cs2=0;

LcdDelay(2);

break;

}

}

/**********************************

显示一个汉字

**********************************/

void Show1616(uchar lin,uchar colum,uchar *address) {

uchar i;

SetLine(lin);

SetColum(colum);

for(i=0;i<16;i++)

{

WriteData(*address);

address++;

}

SetLine(lin+1);

SetColum(colum);

for(i=0;i<16;i++)

{

WriteData(*address);

address++;

}

}

/**********************************

显示一个英文字符

**********************************/

void Show_english(uchar lin,uchar colum,uchar *address) {

uchar i;

SetLine(lin);

SetColum(colum);

for(i=0;i<8;i++)

{

WriteData(*address);

address++;

}

SetLine(lin+1);

SetColum(colum);

for(i=0;i<8;i++)

{

WriteData(*address);

address++;

}

}

/**********************************

清屏

**********************************/

void ClearScreen(uchar screen)

{

uchar i,j;

SelectScreen(screen);

for(i=0;i<8;i++)

{

SetLine(i);

SetColum(0);

for(j=0;j<64;j++)

{

WriteData(0);

}

}

}

/********************************** 12864初始化

**********************************/ void InitLcd()

{

// ResetLcd();

SetOnOff(0);//显示关

ClearScreen(2);//清屏

SetLine(0);//页设置

SetColum(0);//列设置

SetStartLine(0);//设置起始页

SetOnOff(1);//显示开

}

仿真实图:

LCD12864显示程序

;实验目的:熟悉12864LCD的使用 ;12864LCD带中文字库 ;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“0975”,公司传真“6”;硬件设置: ;关断所有拨码开关。 #include<> ;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择 #DEFINE RW PORTA,4 ;读/写选择 #DEFINE E PORTA,3 ;使能信号 #DEFINE PSB PORTA,2 ;并口/串口选择(H/L) #DEFINE RST PORTA,0 ;复位信号 ;----------------------------------------------- LCD_X EQU 30H ;页地址 LCD_Y EQU 31H ;Y地址 COUNT EQU 32H ;循环计数用 COUNT1 EQU 33H ;循环计数用 COUNT2 EQU 34H ;循环计数用 POINT EQU 35H ;查表偏移地址 POINT1 EQU 36H ;查表偏移地址 POINT2 EQU 37H ;查表偏移地址 TEMP EQU 38H ;临时寄存器 TEMP1 EQU 39H ;临时寄存器 ;----------------------------------------------- ORG 0000H ;复位地址 NOP ;ICD需要的空指令 GOTO MAIN ;跳转到主程序 ;**********************主程序************************ MAIN BANKSEL TRISA CLRF TRISA ;A口输出 CLRF TRISD ;D口输出 BANKSEL ADCON1 MOVLW 06H MOVWF ADCON1 ;A口全为数字口 CLRF STATUS

12864液晶显示图片原理(完整版)

51单片机综合学习 12864液晶原理分析1 辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理…… 芯片:YM12864R P-1 控制芯片:ST7920A带中文字库 初步小结: 1、控制芯片不同,寄存器定义会不同 2、显示方式有并行和串行,程序不同 3、含字库芯片显示字符时不必对字符取模了 4、对芯片的结构地址一定要理解清楚

5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚 6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚 7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚 8、显示图片时的二级单元(一级为八位数据写入单元)要清楚 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入

到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。

单片机温度感应控制电路原理图

引言 在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用MCS-51单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。本文以它为例进行介绍,希望能收到举一反三和触类旁通的效果。 1硬件电路设计 以热电偶为检测元件的单片机温度控制系统电路原理图如图1所示。 1.1 温度检测和变送器 温度检测元件和变送器的类型选择与被控温度的范围和精度等级有关。镍铬/镍铝热电偶适用于 0℃-1000℃的温度检测范围,相应输出电压为0mV-41.32mV。 变送器由毫伏变送器和电流/电压变送器组成:毫伏变送器用于把热电偶输出的0mV-41.32mV变换成4mA-20mA的电流;电流/电压变送器用于把毫伏变送器输出的4mA-20mA电流变换成0-5V的电压。 为了提高测量精度,变送器可以进行零点迁移。例如:若温度测量范围为500℃-1000℃,则热电偶输出为20.6mV-41.32mV,毫伏变送器零点迁移后输出4mA-20mA范围电流。这样,采用8位A/D转换器就可使量化温度达到1.96℃以内。 1.2接口电路 接口电路采用MCS-51系列单片机8031,外围扩展并行接口8155,程序存储器EPROM2764,模数转换器ADC0809等芯片。 由图1可见,在P2.0=0和P2.1=0时,8155选中它内部的RAM工作;在P2.0=1和P2.1=0时,8155选中它内部的三个I/O端口工作。相应的地址分配为: 0000H - 00FFH 8155内部RAM 0100H 命令/状态口 0101H A 口 0102H B 口 0103H C 口 0104H 定时器低8位口 0105H 定时器高8位口 8155用作键盘/LED显示器接口电路。图2中键盘有30个按键,分成六行(L0-L5)五列(R0-R4),只要某键被按下,相应的行线和列线才会接通。图中30个按键分三类:一是数字键0-9,共10个;二是功能键18个;三是剩余两个键,可定义或设置成复位键等。为了减少硬件开销,提高系统可靠性和降低成本,采用动态扫描显示。A口和所有LED的八段引线相连,各LED的控制端G和8155C口相连,故A口为字形口,C口为字位口,8031可以通过C口控制LED是否点亮,通过A口显示字符。

LCD12864显示程序

本例程为通过用A T89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细) 点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示: 图1“A”字模图 而中文的“你”在字模中的记载却如图2所示:

图2“你”字模图 12864点阵型LCD简介 12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。 管脚号管脚名称LEVER管脚功能描述 1VSS0电源地 2VDD+5.0V电源电压 3V0-液晶显示器驱动电压 4D/I(RS)H/L D/I=“H”,表示DB7∽DB0为显示数据 D/I=“L”,表示DB7∽DB0为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR或DR 6E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0H/L数据线 8DB1H/L数据线 9DB2H/L数据线 10DB3H/L数据线 11DB4H/L数据线 12DB5H/L数据线 13DB6H/L数据线 14DB7H/L数据线 15CS1H/L H:选择芯片(右半屏)信号 16CS2H/L H:选择芯片(左半屏)信号 17RET H/L复位信号,低电平复位

单片机电路图详解

单片机:交通灯课程设计(一) 目录 摘要--------------------------------------------------------- 1 1.概述 -------------------------------------------------------- 2 2.硬件设计----------------------------------------------------- 3 2.1单片机及其外围--------------------------------------------3 2.1.1单片机的选择-----------------------------------------3 2.1.2单片机的特点及其应用范围----------------------------- 3 2.1.3存储器的扩展----------------------------------------- 4 2.1.4内存的扩展------------------------------------------- 6 2.1.5MCS-52的I/O接口扩展--------------------------------- 8 2.2电路部分--------------------------------------------------11 2.2.1元器件选用-------------------------------------------11 2.2.2电路完成功能-----------------------------------------13 3.软件设计------------------------------------------------------15 3.1软件概述-------------------------------------------------15 3.2汇编语言指令说明-----------------------------------------16 3.3定时/计数器的原理----------------------------------------16 3.3.1定时/计数器的概述-----------------------------------16 3.3.2 8255A片选及各端口地址-------------------------------18 3.3.3信号控制码------------------------------------------18 3.3.4工作方式寄存器--------------------------------------19 3.3.5定时/计数器初值及定时器T0的工作方式----------------20

单片机最小系统原理图

单片机最小系统 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的 系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 下面给出一个51单片机的最小系统电路图. 说明

复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C 取10u,R取8.2K.当然也有其他取法的,原则就是要让R C组合可以在RST脚上产生不少于2个机周期的高电平.至于如何具体定量计算,可以参考电路分析相关书籍. 晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作) 单片机:一片AT89S51/52或其他51系列兼容单片机 特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行.这一点是初学者容易忽略的. 复位电路: 一、复位电路的用途 单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。 单片机复位电路如下图:

二、复位电路的工作原理 在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢? 在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。 开机的时候为什么为复位 在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充

玩转12864液晶(1)--显示字符

在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C) 关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。 我们先来了解一下它的并行连接情况。 下面是电路连接图

从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。 通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。 看看并行模式下的写时序图:

根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。 读时序图如下: 根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。 下面让我们根据这些编写出它的驱动程序吧。 我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C 实际显示效果图片如下: 程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。[p][/p] #include "reg52.h" #include "intrins.h" sbit io_LCD12864_RS = P1^0 ;

51单片机的若干电路原理图

51单片机的若干电路原理图 单片机 2007-10-23 20:36:31 阅读198 评论0 字号:大中小订阅 利用下面这些原理图,就可以自己动手做个简单的实验板啦~~~~ 1 外接电源供电电路及电源指示灯 在单片机实训板上为系统设计了一个外接电源供电电路,这个电源电路具备两种电源供电方式:一种是直接采用PC的USB接口5V直流电源给实训板供电,然后在电源电路中加入一个500mA电流限制的自恢复保险丝给PC的USB电源提供了保护的作用;另一种是采用小型直流稳压电源供电,输出的9V直流电源加入到电源电路中,通过LM7805稳压芯片的降压作用,给实训板提供工作所需的5V电源。 如图2.4所示为采用LM7805稳压芯片进行降压供电的电源电路。 图2.4 外接电源供电电路 同时,为了显示外接电源给实训板提供了电源,在系统中增加了电源指示灯电路,如图2.5。 发光二极管工作在正常工作状态时,流过LED的电流只需要5~10mA左右就行,在电路中采用白发红高亮LED,所以可以取5mA左右

的电流值,通过计算,可知:连接LED的限流电阻的阻值可以采用680Ω。 图2.5 电源指示灯电路 2 系统复位电路 复位是单片机的初始化操作,只要给RESET引脚加上2个机器周期以上的高电平信号,即可使单片机复位。除了进入系统的正常初始化之外,当程序运行出错或是操作错误使系统处于死锁状态时,为了摆脱死锁状态,也需要按复位键重新复位。 在系统中,为了实现上述的两项功能,采用常用的按键电平复位电路,如图2.6所示。 2.6 按键电平复位电路 从途中可以看出,当系统得到工作电压的时候,复位电路工作在上电自动复位状态,通过外部复位电路的电容充电来实现,只要Vcc

LCD12864图形液晶并口显示

LCD12864图形液晶并口显示 【教学引入】 液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。 液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。 【教学目标】 1、掌握LCD12864液晶屏的用法; 2、编写LCD12864液晶屏的指令代码; 【知识目标】 1、掌握LCD12864液晶屏的用法; 2、掌握LCD12864液晶屏指令代码; 【教学准备】 电脑、Proteus、Keil 【教学方法】 教法:讲授法、讨论法 学法:练习法、探究法 【教学课时】 四课时 【教学过程】 一、12864液晶介绍 (1)12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。12864点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。12864M汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

12864引脚说明 查阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集 1、指令表1:(RE=0:基本指令表),如下图,讲解了12864的基本指令集和扩充指令集。

当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0。“RE”为基本指令集与扩充指令集的选择控制位元,往后的指令集将维持在最后的状态。 当选择G=0 :绘图显示OFF,汉字显示的时,12864屏只能显示8X4=32个汉字,下面是汉字显示的坐标

二、12864液晶屏驱动电路 AT89C52的P0口连接12864的并行数据口,RP1为P0口的上拉排阻。 三、52代码编写 (1)打开keil uVision4,建立一个新的工程,工程名为"12864 graphic LCD parallel display",保存类型*.uvproj,单片机型号AT89C52。在工程中添加12864 graphic LCD parallel display.c文件,如下图

(完整版)12864lcd显示部分试验总结报告

12864lcd显示部分试验总结报告 管岱2014.12.19 【实验目的】 在12864液晶显示屏上能够显示出在4×4小键盘上输入的激励源频率值,如输入“789HZ”、“8MHZ”、“2.3KHZ”,显示出“789H”、“8M”、“2.3K”。并且要求此部分程序有较好的可移植性,在最后对电阻率值的显示上能够较好的应用。 【实验原理】 12864-3A接口说明表: 在12864液晶显示原理的基础上,通过在ise上编写vhdl语言,使之能够在fpga学习板上顺利显示数据。

【实验内容】 12864的显示原理并不难理解,并且在以前也用汇编语言实现过,所以本次实验的难点不在于显示原理的理解,而在于VHDL语言的编写。 在实验初期,由于对vhdl语言的不熟练,我们“类比”汇编语言的显示程序,编写出如下的程序: 发现编译时就出现了问题,出现如“multi-source in unit <*> on signal <*>”的报错。在仔细调试检查后发现,我们错误的原因在于:在不同的进程中对同一个信号赋值。例如,在写指

令的进程中,将rs信号置‘0’,而在后面写数据的进程中又将rs置‘1’,由于在vhdl中各进程之间是并行的关系,因此这样编写程序会出现在同一时刻对同一个引脚赋高电平和低电平,从而出现矛盾。虽然在程序实际运行中,写指令进程在系统一上电就会完成,远早于写数据进程,但是在逻辑上这样编写是不符合VHDL语言的规则的。 因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。程序片段如下: 利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。

51单片机引脚工作原理

51单片机引脚工作原理 一、P0端口的结构及工作原理 P0端口8位中的一位结构图见下图: 由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。再看图的右边,标号为P0.X引脚的图标,也就是说P0.X引脚可以是P0.0到P0.7的任何一位,即在P0口有8个与上图相同的电路组成。 下面,我们先就组成P0口的每个单元部份跟大家介绍一下: 先看输入缓冲器:在P0口中,有两个三态的缓冲器,在学数字电路时,我们已知道,三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态),大家看上图,上面一个是读锁存器的缓冲器,也就是说,要读取D锁存器输出端Q的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为…读锁存器?端)有效。下面一个是读引脚的缓冲器,要读取P0.X 引脚上的数据,也要使标号为…读引脚?的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。 D锁存器:构成一个锁存器,通常要用一个时序电路,时序的单元电路在学数字电路时我们已知道,一个触发器可以保存一位的二进制数(即具有保持功能),在51单片机的32根I/O口线中都是用一个D 触发器来构成锁存器的。大家看上图中的D锁存器,D端是数据输入端,CP是控制端(也就是时序控制信号输入端),Q是输出端,Q非是反向输出端。 对于D触发器来讲,当D输入端有一个输入信号,如果这时控制端CP没有信号(也就是时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及反向输出端Q非的。如果时序控制端CP的时序脉冲一旦到了,这时D端输入的数据就会传输到Q及Q非端。数据传送过来后,当CP时序控制端的时序信号消失了,这时,输出端还会保持着上次输入端D的数据(即把上次的数据锁存起来了)。如果下一个时序控制脉冲信号来了,这时D端的数据才再次传送到Q端,从而改变Q端的状态。 多路开关:在51单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口(即I/O)使用,对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为…地

12864液晶显示程序

12864液晶显示程序 由北京迪特福科技编撰提供

#include #include sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; sbit RES = P3^5; #define Lcd_Bus P0 //MCU P1<------> LCM #define FIRST_ADDR 0 //定义字符/汉字显示起始位置 unsigned char code zk[]={ 0x08,0x20,0x1c,0x10,0x1c,0x1c,0xff,0x9e,0x7f,0x1e,0x1c,0x1f,0x3e,0x1f ,0x3e,0x1f, 0x77,0x1f,0x41,0x3f,0x00,0x7e,0x00,0xfe,0x83,0xfc,0x7f,0xf8,0x3f,0xf0 ,0x0f,0xc0, }; unsigned char code BMP1[]={ /*-- 调入了一幅图像:D:\3033B\3033.bmp --*/ /*-- 宽度x高度=128x64 --*/ /*--总共52行数据,每行16个数据--*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,

0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x0C,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x08,0x00,0x00,0x00,0x00,0x00,0x07,0xF1,0x00,0x03,0x01,0x00,0xF0,0x00 ,0x00,0x00, 0x18,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x03,0x81,0x08,0x98,0x00 ,0x00,0x00, 0x10,0x1F,0x07,0x06,0x00,0x00,0x08,0x01,0x00,0x04,0x81,0x11,0x88,0x00 ,0x00,0x00, 0x10,0x21,0x0D,0x83,0xE3,0xC0,0x0F,0x02,0x00,0x04,0xC1,0x31,0x30,0x00 ,0x00,0x00, 0x10,0x21,0x18,0x83,0x06,0x40,0x09,0x82,0x00,0x0F,0xC1,0x21,0xE0,0x00 ,0x00,0x00, 0x10,0x2E,0x11,0x86,0x06,0x40,0x00,0x86,0x00,0x08,0x43,0xC3,0xE0,0x00 ,0x00,0x00, 0x30,0x30,0x11,0x86,0x04,0x40,0x41,0x84,0x10,0x18,0x63,0x82,0x18,0x00 ,0x00,0x00, 0x20,0x1E,0x1F,0x84,0x04,0x60,0x7E,0x04,0x08,0x10,0x23,0x04,0x0E,0x00 ,0x00,0x00, 0x3F,0x83,0x00,0xE0,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x38,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x6C,0x3C,0x00,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x42,0x22,0x03,0xFD,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x40,0x62,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x46,0x42,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x44,0x42,0x00,0x23,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,

12864显示图形

看到工具箱旁边那个LCD12864很久没用了(当初买回来用的时候只是简单地测试了一下),于是萌生了重新写一次接口程序的想法(而且这次要给它加个图片显示的功能),好,说做就做,就用Atmega16和ICCAVR来做吧,最近这MCU和平台用得比较熟练。 马上从书堆里把当初打印出来的中文datasheet给翻了出来,依葫芦画瓢地写了个初始化程序。好,OK。编译通过。于是又写了一个可以自定义从XY坐标值开始输出显示的函数,再次编译,也通过,OK。于是呼马上写了四行简单的字符烧到单片机上试了一下,嘿嘿,一次通过。如下图: 后来在进一步测试的时候也出了点小问题。就是我是使用USBISP烧写器把程序烧写进AVR的(此时实验板由USBISP烧写器供电),想要实现从第一行的第一个字符开始连续显示"0123456789"。刚烧写完程序后能看到LCD12864上正常显示"0123456789",但是把烧写器从实验板上断开连接,单独用USB给实验板供电的时候,LCD的第一行只是显示"123456789",第一个字符消失了……,左思右想地弄了一个多小时后,终于把问题给解决了,就是把初始化程序的延时适当增加了些,真是奇怪。刚开始一直想不通为什么在烧写器供电的情况下就正常显示,而换到USB供电后就出了问题。后来再想想,估计是跟供电有关。在使用USBISP烧写器供电的时候,LCD的背光灯明显比用USB供电的时候来得亮,而且对比度也高很多,看来是因为换到USB供电后,供电不怎么充足,以至于LCD在上电初始化的时候花上了更多的时间去初始化(因为供电低了,功率小了,跑起来有点力不从心,用的时间就久了嘛……我是觉得可以这样去理解的 接下来呢,就到了有点难度的画图了。当初刚买到12864的时候只是简单测试了字符显示功能,除了因为画图还不需要用到,另外一个原因就是那datasheet上关于画图那部分的内容不怎么看得懂…。现在重新拿起来看,依然一头雾水……。马上上网百度了一下“12864 7920 显示图片”,看到了不少的例子程序,可是……就是没看到有关于这部分功能实现的详细思路和讲解……下载下来的那些程序,基本上没注释,不是说晦涩难懂,但是至少看起来一团糟,让人家不想继续看下去……于是还是硬着头皮去啃那datasheet。上面对于画图这部分的内容是这样讲解的:

在12864显示任意图片及参考程序

用12864显示单色图片 首先介绍本12864液晶显示器: 型号:QC12864B 因为单片机读取的是数据,而不是直接的图片。得将图片进行取模,图片应该是单色图片,像素128*64。 下面我为大家介绍个实例。 ①、在电脑附件画图,首先设置属性

开始画图 保存文件,注意格式: ②、然后进行取模。

③、编程: #include #define uchar unsigned char #define uint unsigned int //宏定义 #define lcd P2 //数据端口 sbit rs=P1^2; //指令/数据选择信号 sbit rw=P1^1; //读写选择信号 sbit e=P1^0; //使能端 sbit psb=P1^3; //串并选择端,高电平为并行,低电平为串行 uchar code ai[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0xCE,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,0xE0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC7,0x00,0x00,0x00,0x00,0x00,0x03,0x31,0xC0,0x00,0x00,0x00, 0x00,0x00,0x00,0x0E,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x9B,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x08,0x00,0x00,0x00, 0x00,0x00,0x00,0x78,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0xEF,0x00,0x00,0x00,0x00,0x00,0x1B,0xFC,0x1E,0x00,0x00,0x00, 0x00,0x00,0x00,0x18,0xFE,0x00,0x00,0x00,0x00,0x00,0x1E,0x60,0x38,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x38,0x70,0x20,0x00,0x00,0x00,

LCD12864液晶显示模块(中文资料)

FYD12864液晶中文显示模块

(一) (一)概述 (3) (二)(二)外形尺寸 1 方框图 (3) 2 外型尺寸图 (4) (三)(三)模块的接口 (4) (四)(四)硬件说明 (5) (五) 指令说明 (7) (五)(五)读写操作时序 (8) (六)(六)交流参数 (11) (七)(七)软件初始化过程 (12) (八)(八)应用举例 (13) (九)(九)附录 1半宽字符表 (20) 2 汉字字符表 (21) 一、概述 FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: ●●低电源电压(VDD:+3.0--+5.5V)

●●显示分辨率:128×64点 ●●内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) ●●内置 128个16×8点阵字符 ●●2MHZ时钟频率 ●●显示方式:STN、半透、正显 ●●驱动方式:1/32DUTY,1/5BIAS ●●视角方向:6点 ●●背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 ●●通讯方式:串行、并口可选 ●●内置DC-DC转换电路,无需外加负压 ●●无需片选信号,简化软件设计 ●●工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 二、方框图 3、外形尺寸图

12864液晶显示器(ST7920)显示程序(并口)

12864液晶显示器(ST7920)显示程序(并口) 附字模软件作者:纪小年16 七月2009 时间:下午10:25 and have 10 条评论 前两天写了一个ST7920控制12864显示的串口程序,今天瞎逛的时候发现了这个超强悍的并口程序,转载一下。来源:CnChina 做了比较详细的注释,看不懂的可以问我。下面的图片中12864所显示的logo就是我用这个程序得到的。 附程序: /******************************************************************** ********** Copyright 2007 All rights reserved. 文件名: .c 模块名称:st7920 并行方式驱动12864液晶驱动 功能概要:st7920显示驱动 取代版本:0.0.1 修改人:pulan 完成日期:2007.07.08 升级说明:create CPU: stc89c58 主频:11.0592M 液晶型号:128*64 生产厂家:驱动芯片:st7920 ********************************************************************* *********/ #include #define uint unsigned int #define uchar unsigned char #define x1 0x80 //1000 0000 #define x2 0x88 //1000 1000 #define y 0x80 //1000 0000 #define comm 0 //定义传送指令代码为0 #define dat 1 //定义传送数据代码为1 sbit RS = P2^0; //H=数据; L=指令;

51单片机爱心流水灯原理及制作

电路原理图:

原件清单: 1、51单片机x1、40Pin 座x1 2、LED x32(建议用5mm 七彩的) 3、电阻470Ωx33 4、晶振12MHz x1 5、10uf 电解电容x1、谐振瓷片电容30pf x2 6·其他的可以看自己的爱好去加 7、其实也可以不用那么多的电阻,用几个排阻就OK了。~ 效果展示:

作品程序: #include<> #define uchar unsigned char ; uchar flag=200; /////////////////////////////////////////////////////////////////////// uchar code Tab1[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};//暗中左移向下uchar code Tab2[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF};//暗中右移向上uchar code Tab3[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};//亮中左移向下uchar code Tab4[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//亮中右移向上uchar code Tab11[]={0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0xff};//暗中左移向下uchar code Tab22[]={0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0xff}; //////////////////////////////////////////////////////////////////// uchar code Tab33[]={0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF}; ; uchar code Tab44[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; uchar code Tab55[]={0x08,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff}; uchar code Tab5[]={0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xff};

相关文档
相关文档 最新文档