搜索
bottom↓
回复: 7

论坛处女作:tx-1c板1602做的时钟带年月日周

[复制链接]

出0入0汤圆

发表于 2011-8-30 21:41:45 | 显示全部楼层 |阅读模式
第一次发帖,第一次写这么长的程序,第一次用液晶1602,自己鼓励一下自己,高手莫笑:

/************************************************/
      TX-1C兼容开发板,lcd1602液晶
/************************************************/
#include <reg52.h>
#define uchar  unsigned char
#define uint  unsigned int
sbit dula=P2^7;
sbit wela=P2^6;
sbit diola=P2^5;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit lcdwr=P3^6;
sbit rd=P3^7;//分离矩阵键盘
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;

uchar code table1[]=" 2011-08-30 MON" ;
uchar code table2[]="    12:00:00" ;
uchar aa,s1num;
char hour,minute,sec,day,week,month,year,num,M,O,N,T,U,E,W,E,D,H,F,R,I,A,S;
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void write_com(uchar com)
{
        lcdrs=0;
        lcden=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void write_date(uchar date)
{
        lcdrs=1;
        lcden=0;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void init()
{
//        uchar num;
        hour=12;   //以下7行为测试之
        minute=00;
        sec=00;
        week=1;
        day=30;
        month=8;
        year=11;
        P0=0x0;          //关掉3个寄存器
        dula=1;
        dula=0;
        P0=0xff;
        wela=1;
        wela=0;          
        diola=0;
        lcdwr=0;
        lcden=0;
        rd=0;
        write_com(0x38);//初始化1602液晶
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);//设置显示初始坐标
        write_com(0x80);
        for(num=0;num<15;num++)
        {
                write_date(table1[num]);
                delay(5);
        }
        write_com(0x80+0x40);
        for(num=0;num<12;num++)
        {
                write_date(table2[num]);
                delay(5);
        }
    TMOD=0X01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}

void write_sfm(uchar add,uchar date)
{
        uchar shi,ge;
        shi=date/10;
        ge=date%10;
        write_com(0x80+add);
        write_date(0x30+shi);
        write_date(0x30+ge);
               
}

void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        aa++;
        if(aa==20)
        {
                aa=0;
                sec++;
                if(sec>59)
                {
                        sec=0;
                        minute++;
                        if(minute>59)
                        {
                                minute=0;
                                hour++;
                                if(hour>23)
                                {
                                        hour=0;
                                        day++;
                                        week++;
                                        if(week>7)
                                        {
                                                week=1;
                                        }
                                //        write_sfm(13,week);
                                        switch (week)
                                        {
                                                case 1:
                                                        write_com(0x80+12);
                                                        write_date('M');
                                                        write_com(0x80+13);
                                                        write_date('O');
                                                        write_com(0x80+14);
                                                        write_date('N');
                                                        break;
                                                case 2:
                                                        write_com(0x80+12);
                                                        write_date('T');
                                                        write_com(0x80+13);
                                                        write_date('U');
                                                        write_com(0x80+14);
                                                        write_date('E');
                                                        break;
                                                case 3:
                                                        write_com(0x80+12);
                                                        write_date('W');
                                                        write_com(0x80+13);
                                                        write_date('E');
                                                        write_com(0x80+14);
                                                        write_date('D');
                                                        break;
                                                case 4:
                                                        write_com(0x80+12);
                                                        write_date('T');
                                                        write_com(0x80+13);
                                                        write_date('H');
                                                        write_com(0x80+14);
                                                        write_date('U');
                                                        break;
                                                case 5:
                                                        write_com(0x80+12);
                                                        write_date('F');
                                                        write_com(0x80+13);
                                                        write_date('R');
                                                        write_com(0x80+14);
                                                        write_date('I');
                                                        break;
                                                case 6:
                                                        write_com(0x80+12);
                                                        write_date('S');
                                                        write_com(0x80+13);
                                                        write_date('A');
                                                        write_com(0x80+14);
                                                        write_date('T');
                                                        break;
                                                case 7:
                                                write_com(0x80+12);
                                                write_date('S');
                                                write_com(0x80+13);
                                                write_date('U');
                                                write_com(0x80+14);
                                                write_date('N');
                                                break;
                                        }
                       
                                        if(
                                                ((month==1||month==3||month==5||month==7||month==8||month==10||month==12) && (day>31))||
                                                ((month==4||month==6||month==9||month==11) && (day>30))||
                                                ((month==2) && ((year) % 4==0 && (year) % 100 !=0||(year) % 400==0) &&(day>29))||
                                                ((month==2) && (!((year) %4==0 && (year)%100!=0||(year)%400==0)) && (day>28))
                                                )
                                        {
                                                day=1;
                                                month++;
                                                if(month>12)
                                                {
                                                        month=1;
                                                        year++;
                                                        if(year>99)
                                                        {
                                                                 year=0;
                                                        }
                                                        write_sfm(3,year);
                                                }
                                                write_sfm(6,month);
                                        }
                                        write_sfm(9,day);
                                }
                                write_sfm(0x40+4,hour);
                        }
                        write_sfm(0x40+7,minute);
                }
                write_sfm(0x40+10,sec);
        }
}

void keyscan()
{
        if(s1==0)
        {
                delay(10);
                if(s1==0)
                {
                        while(!s1);
                        s1num++;
                        switch(s1num)
                        {
                                case 1:
                                        TR0=0;
                                        write_com(0x80+0x40+10);
                                        write_com(0x0f);
                                        break;
                                case 2:
                                        write_com(0x80+0x40+7);
                                        write_com(0x0f);
                                        break;       
                                case 3:
                                        write_com(0x80+0x40+4);
                                        write_com(0x0f);
                                        break;       
                                case 4:
                                        write_com(0x80+3);
                                        write_com(0x0f);
                                        break;
                                case 5:
                                        TR0=0;
                                        write_com(0x80+6);
                                        write_com(0x0f);
                                        break;
                                case 6:
                                        write_com(0x80+9);
                                        write_com(0x0f);
                                        break;       
                                case 7:
                                        write_com(0x80+12);
                                        write_com(0x0f);
                                        break;       
                                case 8:
                                        s1num=0;
                                        TR0=1;
                                        write_com(0x0c);
                                        break;                                               
                        }  
                }
       
        }
        if(s1num!=0)
        {
                if(s2==0)
                {
                        delay(10);
                        if(s2==0)
                        {
                                while(!s2);
                                if(s1num==1)
                                {
                                           sec++;
                                        if(sec>59)
                                                sec=0;
                                        write_sfm(0x40+10,sec);
                                        write_com(0x80+0x40+10);
                                }
                                if(s1num==2)
                                {
                                           minute++;
                                        if(minute>59)
                                                minute=0;
                                        write_sfm(0x40+7,minute);
                                        write_com(0x80+0x40+7);
                                }
                                if(s1num==3)
                                {
                                           hour++;
                                        if(hour>24)
                                                hour=0;
                                        write_sfm(0x40+4,hour);
                                        write_com(0x80+0x40+4);
                                }
                                if(s1num==4)
                                {
                                           year++;
                                        if(year>99)
                                                year=0;
                                        write_sfm(+3,year);
                                        write_com(0x80+3);
                                }
                                if(s1num==5)
                                {
                                           month++;
                                        if(month>12)
                                                month=1;
                                        write_sfm(+6,month);
                                        write_com(0x80+6);
                                }
                                if(s1num==6)
                                {
                                           day++;
                                        if(day>31)
                                                day=1;
                                        write_sfm(+9,day);
                                        write_com(0x80+9);
                                }
                                if(s1num==7)
                                {
                                           week++;
                                                if(week>7)
                                                {
                                                        week=1;
                                                }
                                        //  write_sfm(+13,week);
                                        //        write_com(0x80+13);
                                                switch (week)
                                                {
                                                        case 1:
                                                                write_com(0x80+12);
                                                                write_date('M');
                                                                write_com(0x80+13);
                                                                write_date('O');
                                                                write_com(0x80+14);
                                                                write_date('N');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 2:
                                                                write_com(0x80+12);
                                                                write_date('T');
                                                                write_com(0x80+13);
                                                                write_date('U');
                                                                write_com(0x80+14);
                                                                write_date('E');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 3:
                                                                write_com(0x80+12);
                                                                write_date('W');
                                                                write_com(0x80+13);
                                                                write_date('E');
                                                                write_com(0x80+14);
                                                                write_date('D');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 4:
                                                                write_com(0x80+12);
                                                                write_date('T');
                                                                write_com(0x80+13);
                                                                write_date('H');
                                                                write_com(0x80+14);
                                                                write_date('U');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 5:
                                                                write_com(0x80+12);
                                                                write_date('F');
                                                                write_com(0x80+13);
                                                                write_date('R');
                                                                write_com(0x80+14);
                                                                write_date('I');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 6:
                                                                write_com(0x80+12);
                                                                write_date('S');
                                                                write_com(0x80+13);
                                                                write_date('A');
                                                                write_com(0x80+14);
                                                                write_date('T');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 7:
                                                        write_com(0x80+12);
                                                        write_date('S');
                                                        write_com(0x80+13);
                                                        write_date('U');
                                                        write_com(0x80+14);
                                                        write_date('N');
                                                        write_com(0x80+12);
                                                        break;
                                                }
                                }
       
                         }       
                 }
        }               
        if(s1num!=0)
        {
                if(s3==0)
                {
                        delay(10);
                        if(s3==0)
                        {
                                while(!s3);
                                if(s1num==1)
                                {
                                           sec--;
                                        if(sec<0)
                                                sec=59;
                                        write_sfm(0x40+10,sec);
                                        write_com(0x80+0x40+10);
                                }
                                if(s1num==2)
                                {
                                           minute--;
                                        if(minute<0)
                                                minute=59;
                                        write_sfm(0x40+7,minute);
                                        write_com(0x80+0x40+7);
                                }
                                if(s1num==3)
                                {
                                           hour--;
                                        if(hour<0)
                                                hour=23;
                                        write_sfm(0x40+4,hour);
                                        write_com(0x80+0x40+4);
                                }
                                if(s1num==4)
                                {
                                           year--;
                                        if(year<0)
                                                year=99;
                                        write_sfm(+3,year);
                                        write_com(0x80+3);
                                }
                                if(s1num==5)
                                {
                                           month--;
                                        if(month<1)
                                                month=12;
                                        write_sfm(+6,month);
                                        write_com(0x80+6);
                                }
                                if(s1num==6)
                                {
                                           day--;
                                        if(day<1)
                                                day=31;
                                        write_sfm(+9,day);
                                        write_com(0x80+9);
                                }
                                if(s1num==7)
                                {
                                           week--;
                                        if(week<1)
                                                week=7;
                                //                write_sfm(+13,week);
                                //                write_com(0x80+13);
                                                switch (week)
                                                {
                                                        case 1:
                                                                write_com(0x80+12);
                                                                write_date('M');
                                                                write_com(0x80+13);
                                                                write_date('O');
                                                                write_com(0x80+14);
                                                                write_date('N');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 2:
                                                                write_com(0x80+12);
                                                                write_date('T');
                                                                write_com(0x80+13);
                                                                write_date('U');
                                                                write_com(0x80+14);
                                                                write_date('E');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 3:
                                                                write_com(0x80+12);
                                                                write_date('W');
                                                                write_com(0x80+13);
                                                                write_date('E');
                                                                write_com(0x80+14);
                                                                write_date('D');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 4:
                                                                write_com(0x80+12);
                                                                write_date('T');
                                                                write_com(0x80+13);
                                                                write_date('H');
                                                                write_com(0x80+14);
                                                                write_date('U');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 5:
                                                                write_com(0x80+12);
                                                                write_date('F');
                                                                write_com(0x80+13);
                                                                write_date('R');
                                                                write_com(0x80+14);
                                                                write_date('I');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 6:
                                                                write_com(0x80+12);
                                                                write_date('S');
                                                                write_com(0x80+13);
                                                                write_date('A');
                                                                write_com(0x80+14);
                                                                write_date('T');
                                                                write_com(0x80+12);
                                                                break;
                                                        case 7:
                                                        write_com(0x80+12);
                                                        write_date('S');
                                                        write_com(0x80+13);
                                                        write_date('U');
                                                        write_com(0x80+14);
                                                        write_date('N');
                                                        write_com(0x80+12);
                                                        break;
                                                }
                                }
       
                         }       
                 }
        }                 
}

void main()
{
        init();
        while(1)
        {
                keyscan();
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2011-8-30 21:43:39 | 显示全部楼层
得意的是润平年计算,完全是自己琢磨出来的,小有成就感

出0入0汤圆

发表于 2011-8-30 21:48:18 | 显示全部楼层
注_册顶贴

出0入0汤圆

发表于 2011-8-30 22:01:05 | 显示全部楼层
顶一下楼主的处女.作

出0入0汤圆

发表于 2011-8-30 22:33:49 | 显示全部楼层
我也是用TX-1C入门的。

出0入0汤圆

发表于 2011-8-31 13:05:25 | 显示全部楼层
怎么不显示再添加个温度,星期,带闹钟的12864显示呢?  不过这个也还算可以啦

出0入0汤圆

发表于 2012-2-28 13:05:58 | 显示全部楼层
拍手鼓励鼓励~!

出0入0汤圆

发表于 2012-6-24 18:11:02 | 显示全部楼层
这个编程习惯!一个注释都没有,哪怕是英文的都好。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 15:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表