12864LCD智能Word文档下载推荐.docx
《12864LCD智能Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《12864LCD智能Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。
![12864LCD智能Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/17062113-b5d2-417d-bf62-31f6649cbc1f/17062113-b5d2-417d-bf62-31f6649cbc1f1.gif)
unsignedcharkey;
delay(100);
//上电,等待稳定
lcd_init();
//初始化LCD
sys_init();
while
(1)
{
if(dot)
{
DACconversion(PCF8591,0x40,A*dat/5.0);
dot=0;
}
if(change)
EA=0;
display();
f_sta=65536-(1000000/255.0)/f;
RCAP2H=f_sta/256;
//定时器2的16位捕捉/自动重载寄存器
RCAP2L=f_sta%256;
EA=1;
change=0;
if(key=got_key())//若有键,则处理按键
{
key_charge(key);
}
}
/*****************************/
/****系统初始化****/
voidsys_init()
{
RCAP2L=0X00;
RCAP2H=0XFF;
ET2=1;
TR2=1;
EA=1;
/****键处理函数定义****/
voidkey_charge(unsignedcharkey)
switch(key)
case1:
if(++A>
5)A=0;
break;
case2:
if(++f>
10)f=1;
case3:
if(++wave>
2)wave=0;
change=1;
/****填充显示缓冲区****/
voidfil_buf()
ucharx,y,i,h,l;
memset(disp,0,64*16);
//disp的前64*16清零
DIS4[5]=A+'
0'
;
DIS4[13]=f/10+'
DIS4[14]=f%10+'
for(x=0;
x<
128;
x++)
{
switch(wave)
{
case0:
y=A*sin_code[(2*x*f)%255]/(255*5/48)+24-A*4.8;
break;
case1:
y=A*(x%32)/(32*5/48)+24-A*4.8;
//sanjiao
y=((x%64/32)?
48-y:
y);
case2:
l=24-A*4.8;
//juxing
h=(A*46/5+24-A*4.8);
y=(x%64/32)?
l:
h;
if(!
(x%32))
for(i=l;
i<
h;
i++)
{
set_dot(x,i);
}
}
set_dot(x,y);
/****显示函数定义****/
voiddisplay()
uchari;
clr_screen();
fil_buf();
lcd_pos(4,0);
for(i=0;
i<
16;
lcd_wdat(DIS4[i]);
delay(30);
photodisplay(disp);
/*******************************************************************/
/*LCD初始化设定*/
voidlcd_init()
LCD_PSB=1;
//并口方式
LCD_RST=0;
//液晶复位
delay(3);
LCD_RST=1;
lcd_wcmd(0x34);
//扩充指令操作
delay(5);
lcd_wcmd(0x30);
//基本指令操作
lcd_wcmd(0x0C);
//显示开,关光标
lcd_wcmd(0x01);
//清除LCD的显示内容
voidtimer2(void)interrupt5using2//该中断程序中使用第3组工作寄存器串行
staticunsignedcharx;
TF2=0;
//溢出标志
if(x++>
=255)x=0;
switch(wave)
case0:
dat=sin_code[x];
dat=x/128?
2*(255-x):
2*x;
if(x==1)dat=0;
if(x==128)dat=A*(255/5);
dot=1;
2、12864lcd头文件
#ifndef_12864_H
#define_12864_H
#include<
#defineucharunsignedchar
#defineuintunsignedint
/*************12864LCD引脚定义*************/
#defineLCD_dataP0//数据口
sbitLCD_RS=P2^5;
//寄存器选择输入
sbitLCD_RW=P2^6;
//液晶读/写控制
sbitLCD_EN=P2^7;
//液晶使能控制
sbitLCD_PSB=P2^2;
//串/并方式控制
sbitLCD_RST=P2^4;
//液晶复位端口
externxdatauchardisp[65][16];
voidset_dot(ucharx,uchary);
//voidclr_dot(ucharx,uchary);
voiddelay(intms);
bitlcd_busy();
voidlcd_wcmd(ucharcmd);
voidlcd_wdat(uchardat);
voidlcd_pos(ucharX,ucharY);
//voidlcdflag();
voidphotodisplay(uchar*bmp);
voidclr_screen();
#endif
3、12864lcd程序
/*****************************************************************************
*描述:
*
*12864标准字库液晶演示数据p0,控制p2*
********************************************************************************/
intrins.h>
#include"
#definedelayNOP();
{_nop_();
_nop_();
xdatauchardisp[65][16];
voidset_dot(ucharx,uchary)
disp[y][x/8]|=0x80>
>
(x%8);
//voidclr_dot(ucharx,uchary)
//{
//disp[y][x/8]&
=~(0x80>
(x%8));
//}
/*延时函数*/
voiddelay(intms)
while(ms--)
uchary;
for(y=0;
y<
100;
y++);
}
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
/**/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&
0x80);
LCD_EN=0;
return(result);
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
voidlcd_wcmd(ucharcmd)
while(lcd_busy());
LCD_RW=0;
_nop_();
P0=cmd;
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
voidlcd_wdat(uchardat)
LCD_RS=1;
P0=dat;
/*********************************************************/
/*设定显示位置*/
voidlcd_pos(ucharX,ucharY)
ucharpos;
if(X==1)
{X=0x80;
elseif(X==2)
{X=0x90;
elseif(X==3)
{X=0x88;
elseif(X==4)
{X=0x98;
pos=X+Y;
lcd_wcmd(pos);
//显示地址
*图形显示*
voidphotodisplay(uchar*bmp)
uchari,j;
//写数据时,关闭图形显示
32;
lcd_wcmd(0x80+i);
//先写入水平坐标值
lcd_wcmd(0x80);
//写入垂直坐标值
for(j=0;
j<
j++)//再写入两个8位元的数据
lcd_wdat(*bmp++);
delay
(1);
lcd_wcmd(0x88);
j++)
lcd_wcmd(0x36);
//写完数据,开图形显示
lcd_wcmd(0x32);
*清屏函数*
voidclr_screen()
//清屏
4、DA-PCF8591头文件
#ifndef_PCF8591_H
#define_PCF8591_H
bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal);
5、DA-PCF8591程序
I2C.H"
/*******************************************************************
DAC变换,转化函数
*******************************************************************/
bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal)
Start_I2c();
//启动总线
SendByte(sla);
//发送器件地址
if(ack==0)return(0);
SendByte(c);
//发送控制字节
SendByte(Val);
//发送DAC的数值
Stop_I2c();
//结束总线
return
(1);
杨晖晖(09042315)
机械与电子工程学院
2012.07.02
6、正弦波函数及256点
#ifndef_SINCODE_H
#define_SINCODE_H
codeunsignedcharsin_code[]=
128,131,134,137,140,143,146,149,152,156,159,162,165,168,171,174,
176,179,182,185,188,191,193,196,199,201,204,206,209,211,213,216,
218,220,222,224,226,228,230,232,234,236,237,239,240,242,243,245,
246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255,
255,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247,
246,245,243,242,240,239,237,236,234,232,230,228,226,224,222,220,
218,216,213,211,209,206,204,201,199,196,193,191,188,185,182,179,
176,174,171,168,165,162,159,156,152,149,146,143,140,137,134,131,
128,124,121,118,115,112,109,106,103,99,96,93,90,87,84,81,
79,76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,
37,35,33,31,29,27,25,23,21,19,18,16,15,13,12,10,
9,8,7,6,5,4,3,3,2,1,1,0,0,0,0,0,
0,0,0,0,0,0,1,1,2,3,3,4,5,6,7,8,
9,10,12,13,15,16,18,19,21,23,25,27,29,31,33,35,
37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,
79,81,84,87,90,93,96,99,103,106,109,112,115,118,121,124
7、I2C头文件声明
#ifndef_I2C_H
#define_I2C_H
I2C.H>
#defineNOP()_nop_()/*定义空指令*/
#define_Nop()_nop_()/*定义空指令*/
sbitSCL=P1^5;
//I2C时钟
sbitSDA=P3^6;
//I2C数据
externbitack;
//起动总线函数
externvoidStart_I2c();
//结束总线函数
externvoidStop_I2c();
//应答子函数
8、I2C总线的驱动程序
/**********************I2C总线的驱动程序*****************/
bitACK;
/*************************************************************
起动总线函数
函数原型:
voidStart_I2c();
功能:
启动I2C总线,即发送I2C起始条件.
********************************************************************/
voidStart_I2c()
SDA=1;
/*发送起始条件的数据信号*/
_Nop();
SCL=1;
/*起始条件建立时间大于4.7us,延时*/
SDA=0;
/*发送起始信号*/
/*起始条件锁定时间大于4μs*/
SCL=0;
/*钳住I2C总线,准备发送或接收数据*/
结束总线函数
voidStop_I2c();
结束I2C总线,即发送I2C结束条件.
voidStop_I2c()
SDA=0