液晶键盘.docx
《液晶键盘.docx》由会员分享,可在线阅读,更多相关《液晶键盘.docx(19页珍藏版)》请在冰点文库上搜索。
液晶键盘
#include/*commondefinesandmacros*/
#include"derivative.h"/*derivative-specificdefinitions*/
#defineucharunsignedchar
#defineuintunsignedint
//液晶
#defineLCD_RSTPTM_PTM2
#defineLCD_CEPTM_PTM0
#defineLCD_DCPTT_PTT1
#defineSDINPTT_PTT3
#defineSCLKPTT_PTT5
//键盘
#defineSET_KEYPTT_PTT6
#defineUP_KEYPTT_PTT4
#defineDOWN_KEYPTT_PTT2
#defineRESET_KEYPTT_PTT0
/***********12*12的汉字*********/
ucharchinese[]={
/*--文字:
车--*/
/*--TrebuchetMS9;此字体下对应的点阵为:
宽x高=12x12--*/
/*--高度不是8的倍数,现调整为:
宽度x高度=12x16--*/
0x04,0x64,0x54,0x4C,0x47,0xF4,0x44,0x44,0x44,0x44,0x04,0x00,0x02,0x02,0x02,0x02,
0x02,0x0F,0x02,0x02,0x02,0x02,0x02,0x00,
/*--文字:
速--*/
/*--TrebuchetMS9;此字体下对应的点阵为:
宽x高=12x12--*/
/*--高度不是8的倍数,现调整为:
宽度x高度=12x16--*/
0x11,0xF2,0x00,0x7A,0x4A,0xCA,0xFF,0xCA,0x4A,0x7A,0x02,0x00,0x08,0x07,0x08,0x0A,
0x09,0x08,0x0F,0x08,0x09,0x0A,0x08,0x00,
};
/***************ACSII码表***************/
ucharfont6x8[92][6]=
{
{0x00,0x00,0x00,0x00,0x00,0x00},//sp0
{0x00,0x00,0x00,0x2f,0x00,0x00},//!
1
{0x00,0x00,0x07,0x00,0x07,0x00},//"2
{0x00,0x14,0x7f,0x14,0x7f,0x14},//#3
{0x00,0x24,0x2a,0x7f,0x2a,0x12},//$4
{0x00,0x62,0x64,0x08,0x13,0x23},//%5
{0x00,0x36,0x49,0x55,0x22,0x50},//&6
{0x00,0x00,0x05,0x03,0x00,0x00},//'7
{0x00,0x00,0x1c,0x22,0x41,0x00},//(8
{0x00,0x00,0x41,0x22,0x1c,0x00},//)9
{0x00,0x14,0x08,0x3E,0x08,0x14},//*10
{0x00,0x08,0x08,0x3E,0x08,0x08},//+11
{0x00,0x00,0x00,0xA0,0x60,0x00},//,12
{0x00,0x08,0x08,0x08,0x08,0x08},//-13
{0x00,0x00,0x60,0x60,0x00,0x00},//.14
{0x00,0x20,0x10,0x08,0x04,0x02},///15
{0x00,0x3E,0x51,0x49,0x45,0x3E},//016
{0x00,0x00,0x42,0x7F,0x40,0x00},//117
{0x00,0x42,0x61,0x51,0x49,0x46},//218
{0x00,0x21,0x41,0x45,0x4B,0x31},//319
{0x00,0x18,0x14,0x12,0x7F,0x10},//420
{0x00,0x27,0x45,0x45,0x45,0x39},//521
{0x00,0x3C,0x4A,0x49,0x49,0x30},//622
{0x00,0x01,0x71,0x09,0x05,0x03},//723
{0x00,0x36,0x49,0x49,0x49,0x36},//824
{0x00,0x06,0x49,0x49,0x29,0x1E},//925
{0x00,0x00,0x36,0x36,0x00,0x00},//:
26
{0x00,0x00,0x56,0x36,0x00,0x00},//;27
{0x00,0x08,0x14,0x22,0x41,0x00},//<28
{0x00,0x14,0x14,0x14,0x14,0x14},//=29
{0x00,0x00,0x41,0x22,0x14,0x08},//>30
{0x00,0x02,0x01,0x51,0x09,0x06},//?
31
{0x00,0x32,0x49,0x59,0x51,0x3E},//@32
{0x00,0x7C,0x12,0x11,0x12,0x7C},//A33
{0x00,0x7F,0x49,0x49,0x49,0x36},//B34
{0x00,0x3E,0x41,0x41,0x41,0x22},//C35
{0x00,0x7F,0x41,0x41,0x22,0x1C},//D36
{0x00,0x7F,0x49,0x49,0x49,0x41},//E37
{0x00,0x7F,0x09,0x09,0x09,0x01},//F38
{0x00,0x3E,0x41,0x49,0x49,0x7A},//G39
{0x00,0x7F,0x08,0x08,0x08,0x7F},//H40
{0x00,0x00,0x41,0x7F,0x41,0x00},//I41
{0x00,0x20,0x40,0x41,0x3F,0x01},//J42
{0x00,0x7F,0x08,0x14,0x22,0x41},//K43
{0x00,0x7F,0x40,0x40,0x40,0x40},//L44
{0x00,0x7F,0x02,0x0C,0x02,0x7F},//M45
{0x00,0x7F,0x04,0x08,0x10,0x7F},//N46
{0x00,0x3E,0x41,0x41,0x41,0x3E},//O47
{0x00,0x7F,0x09,0x09,0x09,0x06},//P48
{0x00,0x3E,0x41,0x51,0x21,0x5E},//Q49
{0x00,0x7F,0x09,0x19,0x29,0x46},//R50
{0x00,0x46,0x49,0x49,0x49,0x31},//S51
{0x00,0x01,0x01,0x7F,0x01,0x01},//T52
{0x00,0x3F,0x40,0x40,0x40,0x3F},//U53
{0x00,0x1F,0x20,0x40,0x20,0x1F},//V54
{0x00,0x3F,0x40,0x38,0x40,0x3F},//W55
{0x00,0x63,0x14,0x08,0x14,0x63},//X56
{0x00,0x07,0x08,0x70,0x08,0x07},//Y57
{0x00,0x61,0x51,0x49,0x45,0x43},//Z58
{0x00,0x00,0x7F,0x41,0x41,0x00},//[59
{0x00,0x55,0x2A,0x55,0x2A,0x55},//5566
{0x00,0x00,0x41,0x41,0x7F,0x00},//]61
{0x00,0x04,0x02,0x01,0x02,0x04},//^62
{0x00,0x40,0x40,0x40,0x40,0x40},//_63
{0x00,0x00,0x01,0x02,0x04,0x00},//'64
{0x00,0x20,0x54,0x54,0x54,0x79},//a65
{0x00,0x7F,0x48,0x44,0x44,0x38},//b66
{0x00,0x38,0x44,0x44,0x44,0x20},//c67
{0x00,0x38,0x44,0x44,0x48,0x7F},//d68
{0x00,0x38,0x54,0x54,0x54,0x58},//e69
{0x00,0x08,0x7E,0x09,0x01,0x02},//f70
{0x00,0x18,0xA4,0xA4,0xA4,0x7C},//g71
{0x00,0x7F,0x08,0x04,0x04,0x79},//h72
{0x00,0x00,0x44,0x7D,0x40,0x00},//i73
{0x00,0x40,0x80,0x84,0x7D,0x00},//j74
{0x00,0x7F,0x10,0x28,0x44,0x00},//k75
{0x00,0x00,0x41,0x7F,0x40,0x00},//l76
{0x00,0x7C,0x04,0x18,0x04,0x79},//m77
{0x00,0x7C,0x08,0x04,0x04,0x79},//n79
{0x00,0x38,0x44,0x44,0x44,0x38},//o79
{0x00,0xFC,0x24,0x24,0x24,0x18},//p80
{0x00,0x18,0x24,0x24,0x18,0xFC},//q81
{0x00,0x7C,0x08,0x04,0x04,0x08},//r82
{0x00,0x48,0x54,0x54,0x54,0x20},//s83
{0x00,0x04,0x3F,0x44,0x40,0x20},//t84
{0x00,0x3C,0x40,0x40,0x20,0x7C},//u85
{0x00,0x1C,0x20,0x40,0x20,0x1C},//v86
{0x00,0x3C,0x40,0x30,0x40,0x3C},//w87
{0x00,0x44,0x28,0x10,0x28,0x44},//x88
{0x00,0x1C,0xA0,0xA0,0xA0,0x7C},//y89
{0x00,0x44,0x64,0x54,0x4C,0x44},//z90
{0x14,0x14,0x14,0x14,0x14,0x14}//horizlines
};
intSPEED_SET=200;
intP=500;
intI=100;
intSPEED_ST=300;
//***********PLL初始化**************//
voidPLL_Init(void)
{
CLKSEL=0X00;
PLLCTL_PLLON=1;//turnonPLL
SYNR=0xc0|0x07;
REFDV=0x80|0x01;
POSTDIV=0x00;//pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;
_asm(nop);//BUSCLOCK=64M
_asm(nop);
while(!
(CRGFLG_LOCK==1));//锁相环输出稳定
CLKSEL_PLLSEL=1;//engagePLLtosystem;
}
//******IO初始化*******//
voidIO_Init()
{
/////液晶
DDRM_DDRM0=1;
DDRM_DDRM2=1;
PTM_PTM0=0;
PTM_PTM2=0;
DDRT_DDRT1=1;
DDRT_DDRT3=1;
DDRT_DDRT5=1;
PTT_PTT1=0;
PTT_PTT3=0;
PTT_PTT5=0;
//////按键
DDRT_DDRT0=0;
DDRT_DDRT2=0;
DDRT_DDRT4=0;
DDRT_DDRT6=0;
PTT_PTT0=1;
PTT_PTT2=1;
PTT_PTT4=1;
PTT_PTT6=1;
DDRA_DDRA6=0;
PORTA_PA6=1;
DDRA_DDRA4=0;
PORTA_PA4=0;
DDRA_DDRA2=1;
PORTA_PA2=1;
}
//***************延时函数1******************//
voidDelay_250ns(uchartt)//约250ns
{
uintm,n;
for(n=0;n
for(m=0;m<16;m++)
__asm(nop);//一个时钟周期1/64M
}
//**************延时函数2****************//
voidDelay_1ms(intms)
{
intii,jj;
if(ms<1)ms=1;
for(ii=0;ii//for(jj=0;jj<2770;jj++);//32MHz--1ms
//for(jj=0;jj<4006;jj++);//48MHz--1ms
for(jj=0;jj<5341;jj++);//64MHz--1ms
}
/**********************************************************************
*函数名称:
LCD_write_byte()
*函数功能:
写一个字节
*入口参数:
data,要写入的字节;command:
0为命令,1为数据
*出口参数:
无
***********************************************************************/
voidLCD_write_byte(uchardat,ucharcommand)
{
uchari;
LCD_CE=0;//5110片选有效,允许输入数据
if(command==0)//写命令
LCD_DC=0;
elseLCD_DC=1;//写数据
for(i=0;i<8;i++)//传送8bit数据
{
if(dat&0x80)
SDIN=1;
else
SDIN=0;
SCLK=0;
dat=dat<<1;//移位
SCLK=1;
}
LCD_CE=1;//禁止5110
}
/**********************************************************************
*函数名称:
LCD_set_XY()
*函数功能:
光标定位x行y列
*入口参数:
X,Yx行y列
*出口参数:
无
**********************************************************************/
voidLCD_set_XY(ucharX,ucharY)
{
LCD_write_byte(0x40|Y,0);//column
LCD_write_byte(0x80|X,0);//row
}
/**********************************************************************
*函数名称:
LCD_clear()
*函数功能:
液晶清屏
*入口参数:
无
*出口参数:
无
**********************************************************************/
voidLCD_clear(void)
{
uchart,k;
LCD_set_XY(0,0);
for(t=0;t<6;t++)
for(k=0;k<84;k++)
LCD_write_byte(0x00,1);
}
/**********************************************************************
*函数名称:
LCD_Init()
*函数功能:
初始化nokia5110
*入口参数:
无
*出口参数:
无
**********************************************************************/
voidLCD_Init(void)
{
LCD_RST=0;//产生一个让LCD复位的低电平脉冲
Delay_250ns(4);
LCD_RST=1;
LCD_CE=0;//关闭LCD
Delay_250ns(4);
LCD_CE=1;//使能LCD
Delay_250ns(4);
LCD_write_byte(0x21,0);//使用扩展命令设置LCD模式
LCD_write_byte(0xC8,0);//设置偏置电压
LCD_write_byte(0x06,0);//温度校正
LCD_write_byte(0x11,0);//1:
80
LCD_write_byte(0x20,0);//使用基本命令
LCD_clear();//清屏
LCD_write_byte(0x0c,0);//设定显示模式,正常显示
LCD_CE=0;//关闭LCD
}
/***********************************************************************
*函数名称:
LCD_Write_Char()
*函数功能:
写入1个字符
*入口参数:
X:
行;Y:
列;asc:
要写入的数据
*出口参数:
无
*取值范围;X0~83,Y0~5
**********************************************************************/
voidLCD_Write_Char(ucharX,ucharY,ucharasc)
{
ucharline;
LCD_set_XY(X*6,Y);//光标定位
asc=asc-32;//如果想显示a直接输入'a'即可数组行号根据ACSII
for(line=0;line<6;line++)
LCD_write_byte(font6x8[asc][line],1);//从ACSII码表中读取字节,然后写入液晶
}
/***********************************************************************
*函数名称:
LCD_Write_Num()
*函数功能:
显示变亮
*入口参数:
X:
行;Y:
列;num:
变量;N:
要显示的变量的位数
*出口参数:
无
*取值范围;X0~83,Y0~5num<999999,N<6
**********************************************************************/
voidLCD_Write_Num(ucharX,ucharY,uintnum,ucharN)
{
ucharline;
uchari=0;
uintn[5]={0};
n[0]=num%10;
n[1]=(num/10)%10;
n[2]=(num/100)%10;
n[3]=(num/1000)%10;
n[4]=(num/10000)%10;
for(i=0;i<5;i++)n[i]=n[i]+16;//0是从16开始的
for(i=N;i>0;i--)
{
LCD_set_XY(X+(N-i)*6,Y);//光标定位
for(line=0;line<6;line++)
LCD_write_byte(font6x8[n[i-1]][line],1);//从ACSII码表中读取字节,然后写入液晶
}
}
/************************************************