找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2670|回复: 8
收起左侧

我有51单片机电子闹钟的程序,谁可以帮我看看有哪里可以改的,可以酬谢qq1622355981

[复制链接]
ID:147185 发表于 2016-11-10 01:15 | 显示全部楼层 |阅读模式
#include<reg51.h> //头文件  定义单片机内部寄存器#define uchar unsigned char        //宏定义   缩写成uchar#define uint unsigned int//宏定义   缩写成uint//数码管位端口定义sbit w1=P2^2;sbit w2=P2^3;sbit w3=P2^4;sbit w4=P2^5;sbit w5=P2^6;sbit w6=P2^7;////////按键/////////////////////sbit key1=P3^4;//设置时间sbit key2=P3^5;//加sbit key3=P3^6;//减        sbit key4=P3^7;//闹钟sbit beep=P1^0;//蜂鸣器/////共阴数码管段信号编码////////uchar code table[10]=//0---9{0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};//uchar num,miao,fen,shi;//计时  时分秒变量uchar fen1,shi1;//闹钟变量uchar d1,d2,d3,d4,d5,d6;//显示拆分数据void delay(uint ms)//1ms  延时函数   数据保持用的        括号里面是几大概就延时多少ms{        uchar x;        for(ms;ms>0;ms--)                for(x=110;x>0;x--);}void display()//显示函数{        d1=shi/10;//小时        d2=shi%10;//        d3=fen/10;//        d4=fen%10;//分钟        d5=miao/10;//        d6=miao%10;//秒        w1=0;P0=table[d1];delay(10);//第1位显示数据        P0=0x00;w1=1;//关闭显示消除动态扫描阴影        w2=0;P0=table[d2]|0x01;delay(10);//第2位显示数据        P0=0x00;w2=1;//关闭显示消除动态扫描阴影        w3=0;P0=table[d3];delay(10);//第3位显示数据        P0=0x00;w3=1;//关闭显示消除动态扫描阴影        w4=0;P0=table[d4]|0x01;delay(10);//第4位显示数据        P0=0x00;w4=1;//关闭显示消除动态扫描阴影        w5=0;P0=table[d5];delay(10);//第5位显示数据        P0=0x00;w5=1;//关闭显示消除动态扫描阴影        w6=0;P0=table[d6];delay(10);//第6位显示数据        P0=0x00;w6=1;//关闭显示消除动态扫描阴影}void disp_set()//显示函数{        d1=shi1/10;//小时        d2=shi1%10;//        d3=fen1/10;//        d4=fen1%10;//分钟        w1=0;P0=table[d1];delay(10);//第1位显示数据        P0=0x00;w1=1;//关闭显示消除动态扫描阴影        w2=0;P0=table[d2]|0x01;delay(10);//第2位显示数据        P0=0x00;w2=1;//关闭显示消除动态扫描阴影        w3=0;P0=table[d3];delay(10);//第3位显示数据        P0=0x00;w3=1;//关闭显示消除动态扫描阴影        w4=0;P0=table[d4]|0x01;delay(10);//第4位显示数据        P0=0x00;w4=1;//关闭显示消除动态扫描阴影        w5=0;P0=table[0];delay(10);//第5位显示数据        P0=0x00;w5=1;//关闭显示消除动态扫描阴影        w6=0;P0=table[0];delay(10);//第6位显示数据        P0=0x00;w6=1;//关闭显示消除动态扫描阴影}void didi()//滴滴声          设置时间时调用{        uchar i;        beep=0;for(i=0;i<5;i++)display(); //开启蜂鸣器   保持响声        beep=1;for(i=0;i<5;i++)display(); //关闭蜂鸣器         保持关闭}void didi1()//滴滴声  设置闹钟时调用{        uchar i;                        //在括号里调用显示函数也是起到延时作用   为了防止下响声音的时候数码管抖动        beep=0;for(i=0;i<5;i++)disp_set();//开启蜂鸣器   保持响声        beep=1;for(i=0;i<5;i++)disp_set();//关闭蜂鸣器         保持关闭}void keyscan()//调时按键扫描函数{        uchar k_flag,set_flag;        if(key1==0)//按键按下           一下所有按键执行的模式都是一样的        {                delay(10);//延时消除按键抖动                if(key1==0)//确定按键按下                {                        k_flag=1;                        didi();//滴滴声                }                while(key1==0)display();//等待按键松手        }        while(k_flag==1)//开始调整小时数据        {                display();                if(key1==0)                {                        delay(10);//延时消抖                        if(key1==0)                        {                                k_flag=2;                                didi();//滴滴声                        }                        while(key1==0)display();                }                if(key2==0)                {                        delay(10);                        if(key2==0)                        {                                shi++;didi();//滴滴声                                if(shi==24)shi=0;                        }                        while(key2==0)display();                }                if(key3==0)                {                        delay(10);                        if(key3==0)                        {                                if(shi==0)shi=24;                                  shi--;didi();//滴滴声                                }                        while(key3==0)display();                }                }        while(k_flag==2)//开始调整分钟数据        {                display();                if(key1==0)                {                        delay(10);//延时消抖                        if(key1==0)                        {                                k_flag=3;                                didi();//滴滴声                        }                        while(key1==0)display();                }                if(key2==0)                {                        delay(10);                        if(key2==0)                        {                                fen++;didi();//滴滴声                                if(fen==60)fen=0;                        }                        while(key2==0)display();                }                if(key3==0)                {                        delay(10);                        if(key3==0)                        {                                if(fen==0)fen=60;                                  fen--;didi();//滴滴声                                }                        while(key3==0)display();                }                }        while(k_flag==3)//开始调整秒数据        {                display();                if(key1==0)                {                        delay(10);//延时消抖                        if(key1==0)                        {                                didi();//滴滴声                                didi();//滴滴声                                k_flag=0;                        }                        while(key1==0)display();                }                if(key2==0)                {                        delay(10);                        if(key2==0)                        {                                didi();//滴滴声                                miao++;                                if(miao==60)miao=0;                        }                        while(key2==0)display();                }                if(key3==0)                {                        delay(10);                        if(key3==0)                        {                                didi();//滴滴声                                if(miao==0)miao=60;                                  miao--;                                }                        while(key3==0)display();                }                }///////设置定时时间///////////////////////////////////////////////        if(key4==0)        {                delay(10);                if(key4==0)                {                        didi1();//滴滴声                        set_flag=1;                }                while(key4==0)disp_set();        }        while(set_flag==1)        {                disp_set();                if(key2==0)                {                        delay(10);                        if(key2==0)                        {        didi1();//滴滴声                                shi1++;                                if(shi1==24)shi1=0;                        }                        while(key2==0)disp_set();                }                if(key3==0)                {                        delay(10);                        if(key3==0)                        {        didi1();//滴滴声                                if(shi1==0)shi1=24;                                shi1--;                        }                        while(key3==0)disp_set();                }                if(key4==0)                {                        delay(10);                        if(key4==0)                        {        didi1();//滴滴声                                set_flag=2;                        }                        while(key4==0)disp_set();                }                }        while(set_flag==2)        {                disp_set();                if(key2==0)                {                        delay(10);                        if(key2==0)                        {        didi1();//滴滴声                                fen1++;                                if(fen1==60)fen1=0;                        }                        while(key2==0)disp_set();                }                if(key3==0)                {                        delay(10);                        if(key3==0)                        {        didi1();//滴滴声                                if(fen1==0)fen1=60;                                fen1--;                        }                        while(key3==0)disp_set();                }                if(key4==0)                {                        delay(10);                        if(key4==0)                        {                                  didi1();                                didi1();//滴滴声                                set_flag=0;                        }                        while(key4==0)disp_set();                }                }}void b_s()//报时{        uchar i;        if((shi>=7)&&(shi<=20)) ////七点到晚上八点//整点报时,蜂鸣器提示音        {                if((fen==0)&&(miao<=15))  //整点报时15S  需要更改 可以自己下载程序改动                {                        beep=0;for(i=0;i<5;i++)display();//开启蜂鸣器   保持响声                        beep=1;for(i=0;i<5;i++)display();                }        }        if((shi1!=0)||(fen1!=0))//都等于0的时候不是闹钟时间        {                if((shi1==shi)&&(fen1==fen)&&(miao<=15))////闹钟报时15S  需要更改 可以自己下载程序改动                {                        beep=0;for(i=0;i<5;i++)display();//开启蜂鸣器   保持响声                        beep=1;for(i=0;i<5;i++)display();//关闭蜂鸣器        保持关闭                }        }}void main(){        TMOD=0x01;//定时器0  16位计时模式        TH0=(65536-50000)/256; //50ms定时        TL0=(65536-50000)%256; //50ms定时        EA=1;//开启总中断        ET0=1;//开启定时器中断        TR0=1;//开启定时器        while(1)        {                        display();//显示函数                keyscan();//按键扫描函数                b_s();//报时        }}void T0_time() interrupt 1{        TH0=(65536-50000)/256; //50ms定时        TL0=(65536-50000)%256; //50ms定时        num++;//加一次50ms定时        if(num==20)//1S        {                num=0;                miao++;                if(miao==60)                {                        miao=0;                        fen++;                        if(fen==60)                        {                                fen=0;                                shi++;                                if(shi==24)shi=0;                        }                }        }}
回复

使用道具 举报

ID:85726 发表于 2016-11-22 15:49 | 显示全部楼层
这样发上来,让我看实在是头晕的很!
回复

使用道具 举报

ID:111634 发表于 2016-11-22 16:00 | 显示全部楼层
还好,有点注释。还有许多没注释的呢!“大神”门,快来吧!先猜谜揣摩,猜中有姜!!!
回复

使用道具 举报

ID:149257 发表于 2016-11-22 16:56 | 显示全部楼层
能不能把代码顺序整理一下
回复

使用道具 举报

ID:8807 发表于 2016-11-22 18:47 | 显示全部楼层
格式整理一下,看不下去
回复

使用道具 举报

ID:149537 发表于 2016-11-22 19:47 | 显示全部楼层
代码好乱啊
回复

使用道具 举报

ID:141119 发表于 2017-4-6 20:38 | 显示全部楼层
啧啧啧
回复

使用道具 举报

ID:186858 发表于 2017-4-6 20:42 | 显示全部楼层
这格式看太费劲了吧
回复

使用道具 举报

ID:179958 发表于 2017-4-6 22:07 | 显示全部楼层
还是直接发原文件更好,分析这个的话,我更愿意自己重新写了,如果真没人做,可联系我Q1439993299,详谈再定解决方法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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