找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2152|回复: 2
打印 上一主题 下一主题
收起左侧

帮帮呗 怎么写实现一键切换功能;我写的主函数没效果,其他函数正常

[复制链接]
跳转到指定楼层
楼主
ID:81211 发表于 2015-9-4 09:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>
#include"LCD.h"
#include"ds1302.h"
#include"temp.h"
sbit check=P1^0;


void timeLcdDisplay();
void tempLcdDisplay(int temp);
void time_transfer();
void temp_transfer();
void main()
{check=1;
        while(1)  //想在温度和时间之间一键切换
        {
if(check==0)
{
Delay1ms(10);
        while(check==0)
        {temp_transfer();}

}
else{
time_transfer();

}
}}
       
void time_transfer()
{  uint a;
LcdInit();
        Ds1302Init();
        for(a=0;a<60;a++)
        {
       
        Ds1302ReadTime();
                timeLcdDisplay();       
}}
void temp_transfer()
{uint a,b;
       

       
LcdInit();                         //3êˉLCD1602
        LcdWriteCom(0x88);        //D′μ· 80±íê3êμ·
        LcdWriteData('C');
        for(a=0;a<200;a++)
        {
               
        tempLcdDisplay(Ds18b20ReadTemp());
                        Delay1ms(200);
        }}
void timeLcdDisplay()
{
        LcdWriteCom(0x80+0X40);
        LcdWriteData('0'+TIME[2]/16);                                //ê±
        LcdWriteData('0'+(TIME[2]&0x0f));                                 
        LcdWriteData('-');
        LcdWriteData('0'+TIME[1]/16);                                //·
        LcdWriteData('0'+(TIME[1]&0x0f));       
        LcdWriteData('-');
        LcdWriteData('0'+TIME[0]/16);                                //
        LcdWriteData('0'+(TIME[0]&0x0f));

        LcdWriteCom(0x80);
        LcdWriteData('2');
        LcdWriteData('0');
        LcdWriteData('0'+TIME[6]/16);                        //ê
        LcdWriteData('0'+(TIME[6]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[4]/16);                        //
        LcdWriteData('0'+(TIME[4]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[3]/16);                        //è
        LcdWriteData('0'+(TIME[3]&0x0f));
        LcdWriteCom(0x8D);
        LcdWriteData('0'+(TIME[5]&0x07));        //Dú                         
}
void tempLcdDisplay(int temp)
{
unsigned char datas[] = {0, 0, 0, 0, 0}; //¨òêy×é
        float tp;  
        if(temp< 0)                                //μ±èμaoêy
          {
                  LcdWriteCom(0x80);                //D′μ· 80±íê3êμ·
            LcdWriteData('-');                  //êo
                //òòaáèμèêêμêèμ21£ùò1£ùè·′ó3-
                temp=temp-1;
                temp=~temp;
                tp=temp;
                temp=tp*0.0625*100+0.5;       
                //ááDêyμí*100£+0.5êéáè£òòaCóμêy×aaDíμê±oò°Dêyμ
                //oóμêy×ˉè¥μ£21üê·′óóú0.5£+0.5oó′óóú0.5μíê1á£Dóú0.5μí
                //óé0.5£1êúDêyμoó£

          }
        else
          {                       
                  LcdWriteCom(0x80);                //D′μ· 80±íê3êμ·
            LcdWriteData('+');                 //êy
                tp=temp;//òòaêyY′|àíóDDêyμùòè3òμDí±á
                //è1èêyμ′£′yêyμ-íê21ü±éí
                temp=tp*0.0625*100+0.5;       
                //ááDêyμí*100£+0.5êéáè£òòaCóμêy×aaDíμê±oò°Dêyμ
                //oóμêy×ˉè¥μ£21üê·′óóú0.5£+0.5oó′óóú0.5μíê1á£Dóú0.5μí
                //óé0.5£1êúDêyμoó£
        }
        datas[0] = temp / 10000;
        datas[1] = temp % 10000 / 1000;
        datas[2] = temp % 1000 / 100;
        datas[3] = temp % 100 / 10;
        datas[4] = temp % 10;

        LcdWriteCom(0x82);                  //D′μ· 80±íê3êμ·
        LcdWriteData('0'+datas[0]); //°ù

       
        LcdWriteCom(0x83);                 //D′μ· 80±íê3êμ·
        LcdWriteData('0'+datas[1]); //ê

        LcdWriteCom(0x84);                //D′μ· 80±íê3êμ·
        LcdWriteData('0'+datas[2]); //

        LcdWriteCom(0x85);                //D′μ· 80±íê3êμ·
        LcdWriteData('.');                 //ê .ˉ

        LcdWriteCom(0x86);                 //D′μ· 80±íê3êμ·
        LcdWriteData('0'+datas[3]); //êDêyμ  

        LcdWriteCom(0x87);                 //D′μ· 80±íê3êμ·
        LcdWriteData('0'+datas[4]); //êDêyμ  
}




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74784 发表于 2015-9-4 10:50 | 只看该作者
你想别人怎么帮你???
回复

使用道具 举报

板凳
ID:81211 发表于 2015-9-4 10:59 | 只看该作者
怎么写实现一键切换功能;我写的主函数没效果,其他函数正常


void main()
{
        uchar System_Mode;
       
       
        while(1)
        {
                if(key0==0)
                        System_Mode=1;
                if(key0==1)
                        System_Mode=2;
               
   switch(System_Mode)
                { case 1:
                        temp_transfer();
      break;
      case 2:
      time_transfer();
                        break;
                        default:
                        break;}
}
}
       
void time_transfer()
{
LcdInit();
        Ds1302Init();
        while(1)
        {
        Ds1302ReadTime();
                timeLcdDisplay();       
                if(key0==0) break;
        }}
void temp_transfer()
{LcdInit();                         
        LcdWriteCom(0x88);       
        LcdWriteData('C');
        while(1)
        {
        tempLcdDisplay(Ds18b20ReadTemp());
                        Delay1ms(100);
                if(key0==1) break;
        }}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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