24小时热门版块排行榜    

查看: 1798  |  回复: 15

jicai234

铜虫 (初入文坛)

[求助] 求各位大神帮我看下一个小小的程序,只需要你一点儿时间。就会帮我很大的忙

各位大牛们。我来小木虫,有四年了,从大学开始到现在马上毕业。
学习到了很多知识,想过很多路要走。出国,考研,找工作。
在最后时刻,我进了移动。我学的通信,对C语言方面实在是头疼。
恳请各位帮助我一下。、
将一个很简单的电子万年历的程序。画一个流程图、、、、、如果谁愿意。。加我QQ
我在线等、到时候把源程序给你们看看。不多。就500行左右的程序。如果可以,帮我讲解一下。也许会浪费一点时间。但是对我的帮助不可估量,谢谢了。。。。。
回复此楼

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

mvpyqz

至尊木虫 (知名作家)

进来看的人,都是想看看,如果是自己熟悉的,就帮帮你。可是你不贴程序,你让别人主动联系你?主动要你的程序看?别人闲的?哎!我也是属于吃饱了撑得来告诉你为什么这么多人进来,却没人联系你!!建议你贴出来,有没有人帮你那再说!!!

[ 发自手机版 http://muchong.com/3g ]
6楼2013-06-06 16:24:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

jicai234

铜虫 (初入文坛)

自己顶起来,希望强大的小木虫能够帮助我
2楼2013-06-06 15:40:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jicai234

铜虫 (初入文坛)

或者站内信,或者QQ,或者其他什么的联系方式都可以的
毕业论文程序部分不会弄。。只需画一个流程图。、
还有帮我大概看懂就OK了
3楼2013-06-06 15:45:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jicai234

铜虫 (初入文坛)

十五个人都看过了,没有人愿意么。求助各位亲们
4楼2013-06-06 16:08:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jicai234

铜虫 (初入文坛)

或者一字一句,我自己来,帮我看看,我一下一下来,我一定要圆满完成我的毕业论文还有毕业答辩,顺利的
高兴地毕业
5楼2013-06-06 16:20:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jicai234

铜虫 (初入文坛)

引用回帖:
6楼: Originally posted by mvpyqz at 2013-06-06 16:24:26
进来看的人,都是想看看,如果是自己熟悉的,就帮帮你。可是你不贴程序,你让别人主动联系你?主动要你的程序看?别人闲的?哎!我也是属于吃饱了撑得来告诉你为什么这么多人进来,却没人联系你!!建议你贴出来,有 ...

好,我马上贴
谢谢提醒
7楼2013-06-06 16:27:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jicai234

铜虫 (初入文坛)

#include<reg51.h>  //调用头文件
#define uchar unsigned char         //宏定义用 uchar 来代表 unsigned char
#define uint unsigned int          //宏定义用 uint  来代表 unsigned int
sbit io=P1^3;            //定义DS1302数据引脚
sbit rst=P1^4;            //定义DS1302复位引脚
sbit sclk=P1^2;    //定义DS1302时钟引脚
sbit rs=P1^0;             //定义LCD1602数据/命令选择引脚
sbit en=P1^1;           //定义LCD1602使能端引脚
sbit moshi=P1^7;   //定义模式键
sbit jia  =P3^1;   //定义按键加
sbit jian =P3^4;   //定义按键减
sbit nz   =P3^7;   //定义闹钟键
sbit beep =P2^6;   //定义蜂鸣器输出端
sbit  DQ  =P2^0;  //定义DS18B20数据段
uchar code tab[10]={"0123456789"}; //定义0~9ASCLL码数组
uchar code tab_xingqi[7][3]={{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};  //定义星期数组
uchar code tab_alarm[2][16]={{"alarm clock: OFF"},{"alarm clock: ON "}};
char second,minute,hour,date,month,year,day,key,shi,fen,num; //定义年月日时分秒数据变量
uint  value;           //定义数据变量(用于数据转换前暂时存贮)
bit alarmclock,xianshiclock;
bit s1,s2,s3,s4,s5,s6,s7,kai=1;
void delay(uint z)          //延时子程序
{
  uint x;
  uchar y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void delay1302(uint z)
{
   for(z=z;z>0;z--);
}
void delay_18B20(unsigned int i) //DS18B20延时子延时
{
        while(i--);
}

//初始化函数
void Init_DS18B20(void)            //DS18B20初始化
{
         unsigned char x=0;
         DQ = 1;          //DQ复位
         delay_18B20(8);  //稍做延时
         DQ = 0;          //单片机将DQ拉低
         delay_18B20(80); //精确延时 大于 480us
         DQ = 1;          //拉高总线
         delay_18B20(14);
         x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
         delay_18B20(20);
}

ReadOneChar(void)           //读一个字节
{
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
         {
                  DQ = 0; // 给脉冲信号
                  dat>>=1;
                  DQ = 1; // 给脉冲信号
                  if(DQ)
                  dat|=0x80;
                  delay_18B20(4);
         }
        return(dat);
}
  
void WriteOneChar(unsigned char dat)         //写一个字节
{
unsigned char i=0;
for (i=8; i>0; i--)
{
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
}
}

//读取温度
ReadTemperature(void)
{
        unsigned char a=0;
        unsigned char b=0;
        unsigned int  t=0;
       
        Init_DS18B20();
        WriteOneChar(0xCC); // 跳过读序号列号的操作
        WriteOneChar(0x44); // 启动温度转换
        delay_18B20(100);
        Init_DS18B20();
        WriteOneChar(0xCC); //跳过读序号列号的操作
        WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
        a=ReadOneChar();
        b=ReadOneChar();
               
        //传感器返回值除16得实际温度值
        //为了得到2位小数位,先乘100,再除16,考虑整型数据长度,
        //技巧处理后先乘25,再除4,除4用右移实现

        t = (b*256+a)*25;       
        return( t >> 2  );
}
void lcdcom (uchar com)        //LCD1602写入地址
{
        rs=0;
        P0=com;
        delay(5);
        en=1;
        delay(5);
        en=0;
        delay(5);
}
void lcddata (uchar dat)//LCD1602写入数据
{
        rs=1;
        P0=dat;
        delay(5);
        en=1;
        delay(5);
        en=0;
        delay(5);
}
void lcddisplay(uchar a,uchar b) //LCD1602显示程序
{
  lcdcom(a);
  lcddata(b);
}
void lcdinit()         //LCD1602初始化
{
        en=0;
        lcdcom(0x38);
        lcdcom(0x0c);
        lcdcom(0x06);
        lcdcom(0x01);
}
void write(uchar dat)           //写数据
{
        uchar i;
        sclk=0;
        delay1302(1);
        for(i=0;i<8;i++)
        {
        io=dat&0x01;
        delay1302(1);
        sclk=1;          //sclk上升沿接收数据有效
        delay1302(1);
        sclk=0;
        delay1302(1);
        dat>>=1;
        }
}
void writeset(uchar cmd,uchar dat)        //DS1302写入数据
{
        rst=0;
        delay1302(1);
        sclk=0;
        delay1302(1);
        rst=1;
        delay1302(1);  
        write(cmd);
        write(dat);
        sclk=1;
        delay1302(1);
        rst=0;
}
unsigned char read()                    //读数据
{
        uchar i,dat;
        delay1302(1);
        for(i=0;i<8;i++)
        {
        dat>>=1;
        if(io==1)
        dat|=0x80;
        sclk=1;        
        delay1302(1);
        sclk=0;
        delay1302(1);
        }
        return dat;
}
unsigned char readset(uchar cmd)  //DS1302读出数据
{
        uchar dat;
        rst=0;
        delay1302(1);
        sclk=0;
        delay1302(1);
        rst=1;
        write(cmd);
        dat=read();
        sclk=1;
        delay1302(1);
        rst=0;
        return dat;
}
void initDS1302()          //DS1302初始化
{
        writeset(0x8E,0x00);
        writeset(0x80,((0/10)<<4|(0%10)));
        writeset(0x82,((0/10)<<4|(0%10)));
        writeset(0x84,((12/10)<<4|(12%10)));
        writeset(0x86,((1/10)<<4|(1%10)));
        writeset(0x88,((1/10)<<4|(1%10)));
        writeset(0x8c,((10/10)<<4|(10%10)));
}
void xianshi()                         //显示子程序
{
  uchar i;
  uint tmp;
  if(xianshiclock==0)
  {
      
          lcddisplay(0x80,'2');         //显示 2
          lcddata('0');                         //显示        0
          value = readset(0x8d);                                         //读取年
          year=((value&0x70)>>4)*10 + (value&0x0F);        //数据转换
          if(s1==0)
          {
                  lcddata(tab[year/10]);         //显示年十位
                  lcddata(tab[year%10]);         //显示年个位
          }
          else
          {
              lcddata(' ');                                 //显示空白实现闪烁
                  lcddata(' ');
          }
          lcddata('/');                         //显示 /
          value = readset(0x89);                    //读取月
          month=((value&0x70)>>4)*10 + (value&0x0F);//转换月
          if(s2==0)
          {                                                                                          
                  lcddata(tab[month/10]); //显示 月十位
                  lcddata(tab[month%10]); //显示 月个位
          }
           else
          {
              lcddata(' ');                   //显示空白实现闪烁
                  lcddata(' ');
          }

          lcddata('/');                         //显示 /
          value = readset(0x87);                                        //读取日
          date=((value&0x70)>>4)*10 + (value&0x0F);        //转换日
          if(s3==0)
          {
                  lcddata(tab[date/10]);         //显示 日十位
                  lcddata(tab[date%10]);         //显示 日个位
          }
           else
          {
              lcddata(' ');                   //显示空白实现闪烁
                  lcddata(' ');
          }
          value = readset(0x8b); //读取星期
          day   = value;                 //转换星期
          lcdcom(0x8c);          //写入要显示的地址
          for(i=0;i<3;i++)
          {
                    lcddata(tab_xingqi[day-1]);//显示星期
          }
          
          value = readset(0x85);                                         //读小时
          hour=((value&0x70)>>4)*10 + (value&0x0F);        //转换小时
          lcdcom(0xc0);
          if(s4==0)
          {
                  lcddata(tab[hour/10]); //显示小时十位
                  lcddata(tab[hour%10]);                         //显示小时个位
          }
           else
          {
              lcddata(' ');                   //显示空白实现闪烁
                  lcddata(' ');
          }

          lcddata(':');                         //显示 :
       
          value = readset(0x83);                                          //读分钟
          minute=((value&0x70)>>4)*10 + (value&0x0F);//转换分钟
          if(s5==0)
          {
                  lcddata(tab[minute/10]);        //显示分钟十位
                  lcddata(tab[minute%10]);        //显示分钟个位
          }
          else
          {
              lcddata(' ');                   //显示空白实现闪烁
                  lcddata(' ');
          }
          lcddata(':');                         //显示 :
       
          value = readset(0x81);                          //读取秒
          second=((value&0x70)>>4)*10 + (value&0x0F); //转换秒
          lcddata(tab[second/10]);        //显示秒十位
          lcddata(tab[second%10]);        //显示秒个位
          
          tmp=ReadTemperature();   //读取温度
          lcdcom(0xca);                           //写入要现实的地址
          lcddata(tab[tmp/1000%10]);
          lcddata(tab[tmp/100%10]);
          lcddata('.');
          lcddata(tab[tmp/10%10]);
          lcddata(0xdf);
          lcddata('C');  //显示℃          
        }
        else
        {
          lcdcom(0x80);
          for(i=0;i<16;i++)
          {
            lcddata(tab_alarm[alarmclock]); //显示闹钟
          }
          lcdcom(0xc6);
          if(s6==0)
          {
                  lcddata(tab[shi/10]);
                  lcddata(tab[shi%10]);
          }
           else
          {
              lcddata(' ');                   //显示空白实现闪烁
                  lcddata(' ');
          }
          lcddata(':');
          if(s7==0)
          {
                  lcddata(tab[fen/10]);
                  lcddata(tab[fen%10]);
          }
          else
          {
              lcddata(' ');                   //显示空白实现闪烁
                  lcddata(' ');
          }
        }
}
void anjian()                                   //按键检测程序
{
   if(moshi==0)                                   //如果模式键按下
   {
     delay(100);                           //延时消抖
         key++;                                           //再次按下加一,切换下一位
         if(key>7)
         {
           key=0;                                   //按够一圈返回
           xianshiclock=0;                   //显示时钟
           lcdcom(0x01);                   //清屏
           s7=0;
         }
         switch(key)
         {
           case 1: ; break;
           case 2:s1=0; break;
           case        3:s2=0; break;
           case 4:s3=0; break;
           case 5:s4=0; break;
           case 6: lcdcom(0x01); xianshiclock=1; s5=0; break;
           case 7:xianshiclock=1; s6=0;        break;
         }
         while(moshi==0)
         xianshi();
         delay(100);
   }
   if(jia==0)
   {
     delay(100);
         switch(key)
         {
           case 1: year++;    if(year>99) year=0;    writeset(0x8c,((year/10)<<4|(year%10)));  break;        //年加一
           case        2: month++;   if(month>12) month=1;  writeset(0x88,((month/10)<<4|(month%10)));  break;        //月加一
           case 3: date++;          if(date>31)        date=1;  writeset(0x86,((date/10)<<4|(date%10)));  break;  //日加一
           case 4: hour++;    if(hour>23)  hour=0;   writeset(0x84,((hour/10)<<4|(hour%10))); break;  //小时加一
           case 5: minute++;  if(minute>59)minute=0; writeset(0x82,((minute/10)<<4|(minute%10))); break;  //分加一
           case 6: shi++;     if(shi>23) shi=0;         break; //闹钟小时加一
           case 7: fen++;          if(fen>59) fen=0;         break; //闹钟分钟加一
         }
         while(jia==0)
         xianshi();
         delay(100);
   }
   if(jian==0)
   {
     delay(100);
         switch(key)
         {
           case 1: year--;    if(year<0) year=0;    writeset(0x8c,((year/10)<<4|(year%10)));  break;        //年减一
           case        2: month--;   if(month<1) month=12;  writeset(0x88,((month/10)<<4|(month%10)));  break;        //月减一
           case 3: date--;          if(date<1)  date=31;  writeset(0x86,((date/10)<<4|(date%10)));  break;  //日减一
           case 4: hour--;    if(hour<0)  hour=23;   writeset(0x84,((hour/10)<<4|(hour%10))); break;  //小时减一
           case 5: minute--;  if(minute<0)minute=59; writeset(0x82,((minute/10)<<4|(minute%10))); break;  //分减一
           case 6: shi--;     if(shi<0) shi=23; break;          //闹钟小时减一
           case 7: fen--;          if(fen<0) fen=59; break;          //闹钟分钟减一
         }
         while(jian==0)
         xianshi();
         delay(100);
   }
   if(nz==0)
   {
     delay(100);
         xianshiclock=1;
         lcdcom(0x01);
         if((key==6)||(key==7))
         {
            alarmclock=~alarmclock;
                lcdcom(0x01);
         }
         while(nz==0) xianshi();
         if((key!=6)&&(key!=7))xianshiclock=0;
         lcdcom(0x01);
         delay(100);
   }
}
void spert()           //蜂鸣器发声程序
{
  uchar i;
  for(i=200;i>0;i--)
  {
    beep=1;
        delay(1);
        beep=0;
        delay(1);
  }
  delay(500);
  for(i=200;i>0;i--)
  {
    beep=1;
        delay(1);
        beep=0;
        delay(1);
  }
  for(i=6;i>0;i--)
  {
    xianshi();
        if(nz==0)  kai=1;
  }
}
void naozhong()                        //闹钟程序
{
  if(fen!=minute) kai=1;
  if(kai==1)
  if(alarmclock==1)
  {
    if((shi==hour)&&(fen==minute))        //比较现在时间和闹钟时间是否一致
        {
          kai=0;
          while(kai==0)
          {
          spert();                                                //发声
          
          }
          delay(100);                                        //延时消抖
          while(nz==0) xianshi();                //松手检测
          delay(100);                                        //延时消抖
          kai=0;                                                //关闭闹钟等待下次触发
        }
  }
}
void main()
{
  lcdinit(); //LCD1602初始化
  TMOD=0X01;   //配置定时器模式
  ET0=1;           //开启定时器1
  EA=1;                   //开启总中断
  TR0=1;           //开始计时
  beep=0;           //关闭蜂鸣器
  if(jia==0)
  initDS1302();//DS1302初始化
  while(1)
  {
    xianshi();        //显示
        anjian();        //检测按键
        naozhong();        //检测闹钟
  }
}
void timer0() interrupt 1                   //定时器0 中断函数
{
  TH0=0;
  TL0=0;
  num++;
  if(num==8)   //闪烁时间
  {
    num=0;
        switch(key)                //根据KEY的值来选择哪一位闪烁(调节时候)
        {
          case 1: s1=~s1; break;
          case 2: s2=~s2; break;
          case 3: s3=~s3; break;
          case 4: s4=~s4; break;
          case 5: s5=~s5; break;
          case 6: s6=~s6; break;
          case 7: s7=~s7; break;
        }
  }
}
8楼2013-06-06 16:28:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jicai234

铜虫 (初入文坛)

程序全文如下,求指导。。
9楼2013-06-06 16:29:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jicai234

铜虫 (初入文坛)

额。是不是有点多。。看的晕了!
10楼2013-06-06 17:06:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jicai234 的主题更新
信息提示
请填处理意见