LCD12864串行显示程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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