DS12c887P1602.zip

  • zhenglu
    了解作者
  • Others
    开发工具
  • 130KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2015-12-09 14:26
    上传日期
DS12C887电子钟单片机,1602液晶屏显示源程序
DS12c887P1602.zip
  • DS12c887+1602.jpg
    168.4KB
  • DS12c887+1602.txt
    21.7KB
内容介绍
#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar miao,fen,shi,ri,zhou,yue,nian,key_num,time_flag; sbit DS_cs = P2^7; sbit DS_as = P2^3; sbit DS_rw = P3^6; sbit DS_ds = P3^7; sbit RS = P2^4; sbit RW = P2^5; sbit E = P2^6; sbit key1 = P2^0; sbit key2 = P2^1; uchar code table1[]={" 20 - - "}; uchar code table2[]={" : : "}; void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //void ds12887_judge_busy( void) //{ // while(P1&0x80); //} void DS_write(uchar add,uchar date) { DS_as=1; DS_ds=1; DS_rw=1; DS_cs=0; P1=add; DS_as=0; DS_rw=0; P1=date; DS_rw=1; DS_as=1; DS_cs=1; //ds12887_judge_busy; // 不知道要不要忙时检测/????? } uchar DS_read(uchar add) // 有错吗??? { uchar DS_read_dat; DS_as=1; DS_ds=1; DS_rw=1; DS_cs=0; P1=add; DS_as=0; DS_ds=0; P1=0xff; DS_read_dat = P1; DS_ds=1; DS_as=1; DS_cs=1; return(DS_read_dat); //ds12887_judge_busy; } /************************************************************* **功能:判断LCD忙 ** **参数:无 ** *************************************************************/ void check_busy(void) { while(1) { P0=0xff; E=0; _nop_(); RS=0; _nop_(); _nop_(); RW=1; _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); if((P0&0x80)==0) { break; } E=0; } } //****************************************** // 将数据码写入LCD数据寄存器 //****************************************** void write_command(uchar tempdata) { E=0; _nop_(); _nop_(); RS=0; _nop_(); _nop_(); RW=0; P0=tempdata; _nop_(); _nop_(); E=1; _nop_(); _nop_(); E=0; _nop_(); check_busy(); } //******************************************* // 写LCD1602使能程序 //******************************************* void write_data(uchar tempdata) { E=0; _nop_(); _nop_(); RS=1; _nop_(); _nop_(); RW=0; P0=tempdata; _nop_(); _nop_(); E=1; _nop_(); _nop_(); E=0; _nop_(); check_busy(); } void Display_Btime(uchar add,uchar date) { write_command(add); ; write_data(date); } void Display_BCDtime(uchar add,uchar date) { uchar gw,sw; sw=date/10; gw=date%10; write_command(0x80+add); write_data(0x30+sw); write_data(0x30+gw); } void BCD_time() { miao=DS_read(0x00); Display_BCDtime(0x4a,miao); fen=DS_read(0x02); Display_BCDtime(0x47,fen); shi=DS_read(0x04); Display_BCDtime(0x44,shi); ri=DS_read(0x07); Display_BCDtime(0x0a,ri); yue=DS_read(0x08); Display_BCDtime(0x07,yue); nian=DS_read(0x09); Display_BCDtime(0x04,nian); zhou=DS_read(0x06); switch(zhou) { case 1: { Display_Btime(0x80+0x0d,'M'); Display_Btime(0x80+0x0e,'O'); Display_Btime(0x80+0x0f,'N'); } break; case 2: { Display_Btime(0x80+0x0d,'T'); Display_Btime(0x80+0x0e,'U'); Display_Btime(0x80+0x0f,'E'); } break; case 3: { Display_Btime(0x80+0x0d,'W'); Display_Btime(0x80+0x0e,'E'); Display_Btime(0x80+0x0f,'D'); } break; case 4: { Display_Btime(0x80+0x0d,'T'); Display_Btime(0x80+0x0e,'H'); Display_Btime(0x80+0x0f,'U'); } break; case 5: { Display_Btime(0x80+0x0d,'F'); Display_Btime(0x80+0x0e,'R'); Display_Btime(0x80+0x0f,'I'); } break; case 6: { Display_Btime(0x80+0x0d,'S'); Display_Btime(0x80+0x0e,'A'); Display_Btime(0x80+0x0f,'T'); } break; case 7: { Display_Btime(0x80+0x0d,'S'); Display_Btime(0x80+0x0e,'U'); Display_Btime(0x80+0x0f,'N'); } break; default :break; } } void keyscan() { if(key1==0) { delay(10); if(key1==0) { key_num++; time_flag=1; switch(key_num) { case 1: { while(!key1); delay(10); while(!key1); write_command(0x80+0x40+11); write_command(0x0f); } break; case 2 : { while(!key1); delay(10); while(!key1); write_command(0x80+0x40+8); write_command(0x0f); } break; case
评论
    相关推荐