| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5185 人关注过本帖, 1 人收藏
标题:自己写的电子表程序
只看楼主 加入收藏
huizi0711
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-5-17
收藏(1)
 问题点数:0 回复次数:12 
自己写的电子表程序
该程序已经在实验板上测试过,绝对正确
至于端口的设置可以改为自己实验板相应的端口即可

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^6;     //1602设置
sbit lcde=P2^7;
sbit rw=P3^6;
sbit sw1=P3^2;//功能按键,按下使对应的秒,分,时处闪烁,以便对时
sbit sw2=P3^3;//对时时候,按下该键一次可以使秒,分,时自动加一
sbit sw3=P3^4;//对时时候,按下该键一次可以使秒,分,时自动减一
uchar code table[]="2008-10-27";
uchar code table1[]="10-55-00";
uchar num,t,num1;
uchar sec,min,hour,g,s;
void init();
void write_cmd(uchar cmd);
void write_date(uchar date);
void display(uchar add,uchar date);
void delay(uint z)//延时
{
    uint x,y;
    for(x=115;x>0;x--)
        for(y=z;y>0;y--);
}
void init()//初始化
{    sec=50;
    min=55;
    hour=10;
    write_cmd(0x38);
    write_cmd(0x0C);
    write_cmd(0x06);
    write_cmd(0x80+3);
    for(num=0;num<10;num++)
    {
        write_date(table[num]);
        delay(1);
    }
    write_cmd(0x80+0x40+4);
    for(num=0;num<8;num++)
    {
        write_date(table1[num]);
        delay(1);
    }
     TMOD=0x01;
    TH0=(65536-46080)/256;
    TL0=(65536-46080)%256;
    EA=1;
    ET0=1;
    TR0=1;

}
void write_cmd(uchar cmd)//1602写命令
{
   
     rs=0;
    rw=0;
    P0=cmd;
    lcde=0;
    delay(1);
    lcde=1;
    delay(1);
    lcde=0;
    delay(1);

}
void write_date(uchar date)//1602写数据
{
     rs=1;
    rw=0;
    P0=date;
    lcde=0;
    delay(1);
    lcde=1;
    delay(1);
    lcde=0;
    delay(1);

}

void display(uchar add,uchar date)//1602显示
{
    g=date%10;
    s=date/10;
    write_cmd(0x80+0x40+add);
    write_date(0x30+s);    
    write_date(0x30+g);    
    
}
void keyscan()//按键扫描
{
    if(sw1==0)
    {
        delay(5);
        if(sw1==0)
        {
            num1++;
             while(!sw1);
            if(num1==1)
            {
                TR0=0;
                write_cmd(0x80+0x40+11);
                write_cmd(0x0f);
            }
            if(num1==2)
            {
                write_cmd(0x80+0x40+8);
                write_cmd(0x0f);
            }
            if(num1==3)
            {
                write_cmd(0x80+0x40+5);
                write_cmd(0x0f);
            }
            if(num1==4)
            {
                num1=0;
                TR0=1;
                write_cmd(0x0c);
            }
        
        }

    }
    if(num1!=0)
    {
        if(sw2==0)
            {
                delay(5);
                if(sw2==0)
                {    while(!sw2);
                     if(num1==1)
                    {
                        sec++;
                        if(sec==60)
                        sec=0;
                        //write_cmd(0x80+0x40+10);
                        display(10,sec);
                    }
                    if(num1==2)
                    {
                        min++;
                        if(min==60)
                        min=0;
                        //write_cmd(0x80+0x40+10);
                        display(7,min);
                    }    
                    if(num1==3)
                    {
                        hour++;
                        if(hour==24)
                        hour=0;
                        //write_cmd(0x80+0x40+10);
                        display(4,hour);
                    }            
                }
            }
    }
    if(num1!=0)
    {
        if(sw3==0)
            {
                delay(5);
                if(sw3==0)
                {    while(!sw3);
                     if(num1==1)
                    {
                        sec--;
                        if(sec==-1)
                        sec=59;
                        //write_cmd(0x80+0x40+10);
                        display(10,sec);
                    }
                    if(num1==2)
                    {
                        min--;
                        if(min==-1)
                        min=59;
                        //write_cmd(0x80+0x40+10);
                        display(7,min);
                    }    
                    if(num1==3)
                    {
                        hour--;
                        if(hour==-1)
                        hour=23;
                        //write_cmd(0x80+0x40+10);
                        display(4,hour);
                    }            
                }
            }
    }
}  
void main()
{
     init();
    while(1)
    {    
        keyscan();
        if(t==20)
        {
             t=0;
            sec++;
            if(sec==60)
            {
                sec=0;
                min++;
                if(min==60)
                {
                     min=0;
                    hour++;
                    if(hour==24)
                    {
                        hour=0;
                    }
                     display(4,hour);
                }
                 display(7,min);
            }
        
          display(10,sec);
        }
                
    }
}
void timer0() interrupt 1
{
      TH0=(65536-46080)/256;
    TL0=(65536-46080)%256;
    t++;
}

[[it] 本帖最后由 huizi0711 于 2008-10-27 13:45 编辑 [/it]]
搜索更多相关主题的帖子: 电子表 
2008-10-27 13:43
murufy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-8-16
收藏
得分:0 
顶一个,呵呵
2008-10-27 18:08
hlmzrdongdong
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
收藏
得分:0 
回复 2# murufy 的帖子
顶!!!!!!!!!!!
2008-10-27 22:58
狂人老大
Rank: 1
来 自:杭州
等 级:新手上路
威 望:1
帖 子:394
专家分:0
注 册:2007-6-21
收藏
得分:0 
接下来楼主或许可以用下专用的时钟芯片  然后改用12864   然后。。。。还有很多调整时间精度的方法  这么一个一直做下来 很锻炼人的

ACMer的QQ群:33741351
单片机QQ群:55130117
2008-11-16 10:57
hlmzrdongdong
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
收藏
得分:0 
回复 1# 的帖子
想做个实时显示电子时钟,用数码管做,估计这程序得改改。
2008-11-16 20:23
lfx841015
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-11-13
收藏
得分:0 
这个不是单片机哦 是用C编写的吧 ?  不是汇编哦
2008-11-16 21:31
allenrong
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-11-18
收藏
得分:0 
值得鼓励,不过应该参考高手们的软件编写。
2008-11-18 17:00
longwang
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-7-20
收藏
得分:0 
顶一下,呵呵
2009-08-27 17:21
梁子
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:83
专家分:191
注 册:2009-9-20
收藏
得分:0 
不错,顶一下。
2009-09-26 13:46
blair123321
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-12-19
收藏
得分:0 
程序写的不怎么样,移植性不强,应该将程序层次化,即应用层和底层驱动,比如文中键盘扫描程序,就比较杂,键盘扫描就是读取键盘的值,不要外加其他部分。
2009-12-19 19:24
快速回复:自己写的电子表程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017038 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved