LCD12864串行显示程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit SCLK=P2^7; //时钟信号 E

sbit CS=P2^6; //片选信号RS

sbit SID=P2^5; //数据信号RW

sbit PSB=P3^2; //串、并行选择信号uchar code dis1[]=" 2010";

uchar code dis2[]="Ψ00:00:00 Ψ";

uchar code dis3[]=" 26℃";

uchar code dis4[]="!!";

uchar code shu[]="0123456789";

uchar num,gw,sw,count;

/*********延时函数,延时xms************/ void delay(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

/********以串行口协议发送数据************/ void send_bit(uchar byte)

{

uchar x;

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

{

if((byte<

{

SID=1;

}

else

{

SID=0;

}

SCLK=0;

SCLK=1;

}

delay(5);

}

/**********写串口指令*************/

void write_com(uchar com)

{

CS=1; //每次传数据前把CS端拉高

send_bit(0xf8); //写指令

send_bit(com&0xf0); //0xf0为1111 0000,送高四位

send_bit((com<<4)&0xf0); //0xf0为1111 0000,送低四位delay(10);

CS=0;

}

/**********写串口数据*************/

void write_date(uchar date)

{

CS=1; //每次传数据前把CS端拉高

send_bit(0xfa); //写指令

send_bit(date&0xf0); //0xf0为1111 0000,送高四位

send_bit((date<<4)&0xf0); //0xf0为1111 0000,送低四位delay(10);

CS=0;

}

/*********初始化函数****************/

/*********初始化液晶****************/

void init()

{

delay(100);

write_com(0x30); //基本指令模式

delay(10);

write_com(0x0c); //开显示,关游标,关反白

delay(10);

write_com(0x01); //清屏

delay(100);

/***显示初始化***/ /////*

write_com(0x80);

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

{

write_date(dis1[num]);

delay(2);

}

write_com(0x90);

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

{

write_date(dis2[num]);

delay(2);

}

write_com(0x88);

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

{

write_date(dis3[num]);

delay(2);

}

write_com(0x98);

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

{

write_date(dis4[num]);

delay(2);

}

/***定时器0初始化***/

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

TR0=1;

}

void time()

{

uchar shi,fen,miao;

if(count==20) //一秒钟时间到{

count=0;

miao++;

if(miao==60) //一分钟时间到

{

miao=0;

fen++;

if(fen==60) //一小时时间到

{

fen=0;

shi++;

if(shi==24) //一天时间到

{

shi=0;

}

sw=shi/10;

gw=shi%10;

write_com(0x92);

write_date(shu[sw]);

write_date(shu[gw]);

}

sw=fen/10;

gw=fen%10;

write_com(0x93);

write_date(':');

write_date(shu[sw]);

write_date(shu[gw]);

}

sw=miao/10;

gw=miao%10;

write_com(0x95);

write_date(shu[sw]);

write_date(shu[gw]);

}

}

void main()

{

PSB=0;

delay(5);

init();

while(1)

{

time();

}

}

/****定时器重装初值****/

void timer0() interrupt 1

相关文档
最新文档