完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include #include #define uchar unsigned char #define uint unsigned int #define clear 0x01 //清屏幕,约1.6ms 清除显示屏幕,把DDRAM位址计数器调整为"00H" #define home 0x02 //把DDRAM位址计数器调整为"00H",游标回原点,该功能不影响显示DDRAM #define f_set 0x30 //基本指令集动作 #define dis_on 0x0f //打开显示,光标,闪烁功能 #define in_mode 0x06 //输入方式,地址增1,光标右移 /*------------LCD-----------*/ ***it P_RS=P1^0; ***it P_RW=P1^1; ***it P_E= P1^2; uchar time[6]; //显示时间数组 uchar str1[] ; bit flag=0; /******************************************** 简单的送8位数据程序 ********************************************/ void bit8_serial_input(uchar ix) { uchar i; P_E=0; for(i=0x80;i>=0x01;i=i>>1) { if((ix&i)==0) P_RW=0; else P_RW=1; P_E=1; P_E=0; } } /*---------------------------------------------------------*/ /*-----------MCU写指令到指令寄存器IR--------------*/ void instruct(uchar dat) //只有3个指令RS,RW不同时为0 { uchar ch; P_RS=1; //选通 ch=0xf8; bit8_serial_input(ch); //和单片机进行同步5个1; ch=dat&0xf0; //写入高四位 bit8_serial_input(ch); ch=dat<<4; ///写低四位 bit8_serial_input(ch); P_RS=0; //结束作业 } /*-------------MCU写数据到数据寄存器DR--------------*/ void write_abyte(uchar dat) { data uchar ch; P_RS=1; //读数据--不选通 ch=0xfa; //RS=1 RW=0; bit8_serial_input(ch); ch=dat&0xf0; //RS=1 RW=0; bit8_serial_input(ch); ch=dat<<4; bit8_serial_input(ch); P_RS=0; //结束作业 } void dis_str(uchar x, uchar y, uchar *str) { uchar loc,*p; uchar xline[5]={0,1,3,2,4}; p=str; x=xline[x]; instruct(home); loc=(16*(x-1)+y-1); if(loc&0x01){ loc/=2; instruct(loc|0x80); write_abyte(' '); }else{ loc/=2; instruct(loc|0x80); } while(*p){ write_abyte(*p++); } } /*--------对液晶显示屏初始化--------------------*/ void initial(void) { data uchar i,j; P_RS=0; //串行不选通 P_E=0; //串行方式 instruct(f_set); //0x30; //设定使用基本指令集动作,有11条指令 for(i=0;i<30;i++){} for(i=0;i<250;i++){} for(i=0;i<250;i++){} instruct(f_set); for(i=0;i<30;i++){} for(i=0;i<250;i++){} for(i=0;i<250;i++){} instruct(dis_on); //0x0f; //开启屏幕 光标在第一位闪烁 for(i=0;i<30;i++){} instruct(clear); //0x01; //清屏幕 clear for(j=0;j<10;j++){ for(i=0;i<250;i++){} } instruct(in_mode); //0x06; //光标右移、地址增1 方式 for(i=0;i<30;i++){} instruct(home); } // void init_timer(void) { TMOD=0x01; //定时器0 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } //***************************************************************************** // // The interrupt handler for the first timer interrupt. // //***************************************************************************** // 主函数(程序入口) void main(void) { int second; initial(); init_timer(); dis_str(1,3,"东北农业大学"); dis_str(2,1,"2011年07月23日"); dis_str(4,9,"saturday"); instruct(0x0c); //关闭光标 for (;;) { if(flag==1) { flag=0; second++; time[0]=second/600%6+'0'; time[1]=second/60%10+'0'; time[2]=':'; time[3]=second/10%6+'0'; time[4]=second%10+'0'; time[5]=' |