- /*****************************************************************
- //文件名:12864.c
- //描绘:该文件界说与12864有关的各种接口、函数,适用于MSP430F149
- //编写人:小邪@清水
- //版本号:2.01
- *****************************************************************/
- #include
- #include”12864.h”
- #defineucharunsignedchar
- #defineuintunsignedint
- #defineBIT(x)(1<<(x))
- unsignedcharNUM[]={“0123456789.”};
- ucharAddress[4][8]={
- {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87},
- {0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97},
- {0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f},
- {0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f}
- };
- /*****************************************************************
- //关于12864的一些宏界说
- //留意:各项数据都要依据实际使用IO口更改
- *****************************************************************/
- #defineCS0//CS=P3.0
- #defineSID1//SID=P3.1
- #defineCLK2//CLK=P3.2
- #definePORTP3OUT
- #defineDIRP3DIR
- /*************************************************************************
- //称号:delay_Nus
- //参数:延时的时刻n
- //返回值:无
- //功用:延时nNs的时刻
- *************************************************************************/
- voiddelay_Nus(uintn)
- {
- uchari;
- for(i=n;i>0;i–)
- _NOP();
- }
- /*************************************************************************
- //称号:delay_1ms
- //参数:无
- //返回值:无
- //功用:延时1ms的时刻
- *************************************************************************/
- voiddelay_1ms(void)
- {
- uchari;
- for(i=150;i>0;i–)_NOP();
- }
- /*************************************************************************
- //称号:delay_Nms
- //参数:延时的时刻n
- //返回值:无
- //功用:延时1ms的时刻
- *************************************************************************/
- voiddelay_Nms(uintn)
- {
- uinti=0;
- for(i=n;i>0;i–)
- delay_1ms();
- }
- /*************************************************************************
- //称号:LcdInit
- //参数:无
- //返回值:无
- //功用:初始化12864
- *************************************************************************/
- voidLcdInit(void)
- {
- DIR|=BIT(CLK)+BIT(SID)+BIT(CS);//相应的位端口设置为输出
- delay_Nms(100);//延时等候液晶完结复位
- Send(0,0×30);//功用设置:一次送8位数据,根本指令集
- delay_Nus(72);
- Send(0,0×02);//DDRAM地址归位
- delay_Nus(72);
- Send(0,0x0c);//显现设定:开显现,不显现光标,不做当时显现位反白闪烁
- delay_Nus(72);
- Send(0,0×01);//清屏,将DDRAM的位址计数器调整为“00H”
- delay_Nus(72);
- Send(0,0×06);//功用设置,点设定:显现字符/光标从左到右移位,DDRAM地址加1
- delay_Nus(72);
- }
- /*************************************************************************
- //称号:Send
- //参数:数据类型type:0–操控指令,1–显现数据,transdata–发送的数据
- //返回值:无
- //功用:向12864发送一个字节的数据,可用于操控可用于显现
- *************************************************************************/
- voidSend(uchartype,uchartransdata)
- {
- ucharfirstbyte=0xf8;
- uchartemp;
- uchari,j=3;
- if(type)firstbyte|=0x02;
- PORT|=BIT(CS);
- PORT&=~BIT(CLK);
- while(j>0)
- {
- if(j==3)temp=firstbyte;
- elseif(j==2)temp=transdata&0xf0;
- elsetemp=(transdata<<4)&0xf0;
- for(i=8;i>0;i–)
- {
- if(temp&0x80)PORT|=BIT(SID);
- elsePORT&=~BIT(SID);
- PORT|=BIT(CLK);
- temp<<=1;
- PORT&=~BIT(CLK);
- }//三个字节之间必定要有满足的延时,不然易呈现时序问题
- if(j==3)delay_Nus(600);
- elsedelay_Nus(200);
- j–;
- }
- PORT&=~BIT(SID);
- PORT&=~BIT(CS);
- }
- /*************************************************************************
- //称号:Clear_GDRAM
- //参数:数据类型type:0–操控指令,1–显现数据,transdata–发送的数据
- //返回值:无
- //功用:向12864发送一个字节的数据,可用于操控可用于显现
- *************************************************************************/
- voidClear_GDRAM(void)
- {
- uchari,j,k;
- Send(0,0×34);//翻开扩展指令集
- i=0x80;
- for(j=0;j<32;j++)
- {
- Send(0,i++);
- Send(0,0×80);
- for(k=0;k<16;k++)
- {
- Send(1,0×00);
- }
- }
- i=0x80;
- for(j=0;j<32;j++)
- {
- Send(0,i++);
- Send(0,0×88);
- for(k=0;k<16;k++)
- {
- Send(1,0×00);
- }
- }
- Send(0,0×30);//回到根本指令集
- }
-
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/257266.html