|
/********************************************************************
* 文件名 : 串行12864显示.c
* 描述 : 该程序实现了12864以串行的方式进行通信。
液晶上的R9。R10决定液晶的串行或者并行通讯方式。
***********************************************************************/
#include //声明库
#define uchar unsigned char
#define uint unsigned int
//CS=P1^5; //片选信号
//SID=P1^6; //数据信号
//SCLK=P1^7; //时钟信号
//RST=P1^2; //复位信号
//CH = P1^4; //并行、串行选择信号
/********************************************************************
* 名称 : delay()
*
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i
for(j=0; j<10; j++);
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
P1OUT |=BIT6;//SID=1
}
else
{
P1OUT &=~BIT6;
}
P1OUT &=~BIT7;//SCLK = 0;
P1OUT |=BIT7;//SCLK = 1;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
P1OUT |=BIT5;//CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口数据
* 输入 : Dispdata
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
P1OUT |=BIT5;//CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
P1OUT &=~BIT2;//RST = 0;
delay(100);
P1OUT |=BIT2;//RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(char *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81);
hzkdis("5555");
write_com(0x91);
hzkdis("");
write_com(0x89);
hzkdis("");
write_com(0x98);
hzkdis("");
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
WDTCTL=WDTPW+WDTHOLD; //关掉看门狗
P1DIR =0xFF;
P1OUT &=~BIT4;//CH = 0;
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}
测试成功,目前想做数字示波器 液晶调好了 ad死活调不好.....
|
|