历史上的今天
返回首页

历史上的今天

今天是:2024年12月22日(星期日)

2020年12月22日 | 单片机微波炉控制系统

2020-12-22 来源:51hei

单片机源程序如下:

Wendu.h (头文件)

#define jump_ROM 0xCC//ds18B20定义

#define start 0x44

#define read_EEROM 0xBE

void delay(unsigned int N);

void delay_1();

unsigned char Reset(void);//复位DS18B20

unsigned char read_bit(void);//从DS18B20读一个位值

void write_bit(unsigned char bitval);//向DS18B20写一位

unsigned char read_byte(void);//从DS18B20读一个字节

void write_byte(unsigned char val);// 向DS18B20写一个字节


Wendu.c (Wendu.h 的实现)

#include

#include"wendu.h"

sbit DQ = P2^3;         //DS18B20数据口


/********************************************************************

* 名称 : delay()

* 功能 : 延时,延时时间大概为140US。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_1()

{

        int i,j;

        for(i=0; i<=10; i++)

        for(j=0; j<=2; j++);

}

/********************************************************************

* 名称 : delay()

* 功能 : 延时函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay(unsigned int N)

{

        int i;

        for(i=0; i}

/********************************************************************

* 名称 : Reset()

* 功能 : 复位DS18B20

* 输入 : 无

* 输出 : 无

***********************************************************************/

unsigned char Reset(void)

{

        unsigned char deceive_ready;

        DQ = 0;

        delay(29);

        DQ = 1;

        delay(3);

        deceive_ready = DQ;

        delay(25);

        return(deceive_ready);

}

/********************************************************************

* 名称 : read_byte()

* 功能 : 从DS18B20读一个字节

* 输入 : 无

* 输出 : 从DS18B20读到的值

***********************************************************************/

/********************************************************************

* 名称 : read_bit()

* 功能 : 从DS18B20读一个位值

* 输入 : 无

* 输出 : 从DS18B20读出的一个位值

***********************************************************************/

unsigned char read_bit(void)

{

        unsigned char i;

        DQ = 0;

        DQ = 1;

        for(i=0; i<3; i++);

        return(DQ);

}

/********************************************************************

* 名称 : write_bit()

* 功能 : 向DS18B20写一位

* 输入 : bitval(要对DS18B20写入的位值)

* 输出 : 无

***********************************************************************/

void write_bit(unsigned char bitval)

{

DQ=0;if(bitval==1)

DQ=1;

delay(5);

DQ=1;

}

/********************************************************************

* 名称 : read_byte()

* 功能 : 从DS18B20读一个字节

* 输入 : 无

* 输出 : 从DS18B20读到的值

***********************************************************************/

unsigned char read_byte(void)

{

        unsigned char i,m,receive_data;

        m = 1;

        receive_data = 0;

        for(i=0; i<8; i++)

        {

                if(read_bit())

                {

                        receive_data = receive_data + (m << i);

                }

                delay(6);

        }

        return(receive_data);

}


/********************************************************************

* 名称 : write_byte()

* 功能 : 向DS18B20写一个字节

* 输入 : val(要对DS18B20写入的命令值)

* 输出 : 无

***********************************************************************/

void write_byte(unsigned char val)

{

        unsigned char i,temp;

        for(i=0; i<8; i++)

        {

                temp = val >> i;

                temp = temp & 0x01;

                write_bit(temp);

                delay(5);

        }

}


主函数的实现

#include

#include"wendu.h"

sbit key1=P1^4;       //矩阵键盘定义

sbit key2=P1^5;

sbit key3=P1^6;

sbit key4=P1^7;

sbit S1=P3^2;          //按键定义

sbit S2=P3^3;

sbit S3=P3^4;

sbit RS=P2^5;           //12864定义

sbit RW=P2^6;

sbit E=P2^7;

sbit BEEP = P2^0;          //蜂鸣器定义

sbit Hot=P2^1;

unsigned char TMPH,TMPL,key41=1,Temp,T;   //温度常量

unsigned int count1,count2,count3;    //时间常量

unsigned int countor,m,s;         //计时常量

unsigned char button,sound;  //其他常量

unsigned char code table[]={"0123456789"};


/******************子程序说明********************/

void delay_1ms(unsigned int i);      //1ms延时

void delay();                    //延时子程序

void beep();                     //响铃程序

void set(char n);        //12864写指令子程序

void weizhi(int hang,int lie);         //12864字符显示位置

void wdata(unsigned char d);              //往12864写数据,单个字符

void wsdata(char tab[]);                //往12864写数据,字符串

void scan();                 //矩阵键盘第一列扫描,确定所输入的时间

void setTemp();                 //温度设定,采用扫描独立键盘来确定输入

void setTime();            //时间设定

void showTime();          //显示时间

void chu12864();  //初始化12864

void chuDS();    //初始化DS18B20


/********************主程序*************************/

void main()             //主函数

{  

        chu12864();//12864的初始化

        setTemp();

        setTime();  

        while(1)

        {

        chuDS();

                if(Temp==T)                  

                   TR0=1;

                showTemp();                 

            showTime();               

                if(sound==1)

              beep();   

          }  

}

/******************************************/


void time0(void) interrupt 1 using 1    //定时中断程序

{

        countor++;

        if(countor==20)

        {

              if(m==0&&s==0) //倒计时

            {

              m=0;

              s=0;

              sound=1;

              Hot=0;

              TR0=0;

             }

                else

                if(s==0)

            { m--;s=59;}

            else

                s--;

     countor=0;

   }

  TH0=(65536-50000)/256;

  TL0=(65536-50000)%256;

}



/************************************************/

void delay_1ms(unsigned int i)      //1ms延时

{

        unsigned char x,j;

        for(j=0;j        for(x=0;x<=148;x++);        

}

/************************************************/

void delay()                    //延时子程序

{

  int a,b;

   for(a=0;a<100;a++)

    for(b=0;b<10;b++);

}/************************************************/

void beep()                     //响铃程序

{

  unsigned char i;

  for (i=0;i<100;i++)

   {

   delay_1ms(1);

   BEEP=!BEEP;                 //BEEP取反

   }

  BEEP=1;                      //关闭蜂鸣器

}

/************************************************/

void set(char n)        //12864写指令子程序

{

  P0=n;

  RS=0;

  RW=0;

  E=0;

  delay();

  E=1;

  delay();

}

/******************************************/

void weizhi(int hang,int lie)         //12864字符显示位置

{

  char a;

  if(hang==1) a=0x80;

  if(hang==2) a=0xc0;

  a=a+lie-1;

  set(a);

}

/******************************************/

void wdata(unsigned char d)              //往12864写数据,单个字符

{

  RS=1;

  RW=0;

  P0=d;

  E=0;

  delay();

  E=1;

  delay();

}

/******************************************/

void wsdata(char tab[])                //往12864写数据,字符串

{

  int i=0;

  RS=1;

  RW=0;

  while(tab[i]!='')          //不是结束符时执行

   {

     P0=tab[i];

     E=0;

     delay();

     E=1;

     delay();

         i++;

  }

}

/******************************************/

推荐阅读

史海拾趣

Ferraz Shawmut(Mersen)公司的发展小趣事

2007年,Ferraz Shawmut收购了美国的General Electric公司的功率熔断器部门。这一收购不仅增强了公司在功率熔断器领域的实力,也进一步巩固了其在电气保护领域的领先地位。通过整合双方的技术和资源,Ferraz Shawmut推出了更多高性能、高品质的电气保护产品。

HOPERF公司的发展小趣事

为了进一步提升生产效率和产品质量,HOPERF在无锡太湖科技园建立了3万平方米的现代化生产基地。该基地引进了德国、美国等地区的先进封装测试生产设备和高精密测试测量仪器,并严格按照ISO9001国际质量认证体系进行生产管理。这种高标准的生产管理流程确保了产品质量的可靠性和稳定性,赢得了国内外客户的广泛认可和信赖。

华大北斗(Allystar)公司的发展小趣事

随着技术的不断积累和市场的日益扩大,HOPERF开始着手整合产业链资源。公司不仅在ASIC芯片设计和MEMS传感芯片设计方面持续深耕,还逐步构建起包括封装测试校准技术、应用服务在内的完整产业链。同时,HOPERF积极实施全球化战略,在全球范围内招募顶尖研发设计人才,其中60%的专家级工程师来自德国、美国、瑞士等国际一流企业。这些举措极大地提升了公司的研发实力和市场竞争力,为公司的全球化发展奠定了人才和技术基础。

富信半导体(FOSAN)公司的发展小趣事

为了进一步提升生产效率和产品质量,HOPERF在无锡太湖科技园建立了3万平方米的现代化生产基地。该基地引进了德国、美国等地区的先进封装测试生产设备和高精密测试测量仪器,并严格按照ISO9001国际质量认证体系进行生产管理。这种高标准的生产管理流程确保了产品质量的可靠性和稳定性,赢得了国内外客户的广泛认可和信赖。

ELEKTRO-PLAST NASIELSK公司的发展小趣事

进入新世纪后,电子行业发展迅速,对电子元器件的性能要求也越来越高。ELEKTRO-PLAST NASIELSK公司紧跟行业趋势,投入大量资源进行技术创新。公司研发团队成功开发出一种新型塑料材料,不仅具有优异的绝缘性能和耐高温性能,还具有良好的可加工性。这一技术突破使得公司的产品在市场上脱颖而出,赢得了众多客户的青睐。

Gardner Denver公司的发展小趣事

ELEKTRO-PLAST NASIELSK公司成立于上世纪九十年代,当时正值电子行业蓬勃发展的时期。创始人敏锐地察觉到塑料材料在电子元器件制造中的潜力,决定专注于研发和生产塑料外壳的电子元器件。然而,初创时期面临资金紧张、技术瓶颈和市场接受度低的挑战。创始人通过不懈努力,成功研发出具有竞争力的产品,并通过参加行业展会和建立合作伙伴关系,逐渐打开了市场。

问答坊 | AI 解惑

如何定位一路IP电话

求助大虾:   最近在做一个语音网关的录音程序,语音网关把IP包发到录音服务器上.   请问,我如何定位一路电话.也就是如何张明和李浩打电话,如何道准确定位是张明的IP语音包? …

查看全部问答>

急问一个关于WINDOWS MOBILE程序界面UI的问题!

各位大侠,小弟初学WM6编程,现在要作个UI。问题是我用VC++2005,用WIN32来写。大家都知道,在windows mobile 里面,当进入一个文件夹的时候,titlebay的下面一行,即总体第二行会显示文件的路径,并且是玻璃色的,比如显示“My Device”等等路径信 ...…

查看全部问答>

ps2鼠标不动?

平台:mc2410 pb4.2 描述:    用pb4.2生成了一个wince的nk.bin,通过vivi下载到板子上,连接一个ps2机械鼠标,启动wince,后,发现鼠标没有任何反应,2个口都试验了。为何我的鼠标没有反应?默认的wince4.2 是否有ps2鼠标驱动?…

查看全部问答>

PCI接口卡设计的问题

PCI接口卡设计的问题: 1.如果电脑上的PCI槽是5V槽,是不是从槽上只能获得5V电源?3.3V的电源不能获取?而且只能设计成5V的PCI接口卡?如果PCI卡上需要3.3V电源,只能从5V转换得到? 2.假如不能从电脑PCI槽上获得3.3V电源,PCI卡接口的PCI槽部分3 ...…

查看全部问答>

WINCE 中新建连接里的直接连接是灰色的,我该怎么办?

WINCE 中新建连接里的直接连接是灰色的,我该怎么办? 是不是我定制的操作系统缺少了什么组件?…

查看全部问答>

电快速瞬变脉冲群干扰

电快速瞬变脉冲群干扰频谱分析及其导致微机保护非正常重启实例.…

查看全部问答>

BSL初始化失败是什么原因?急急急!!!

我用BSL下程序提示“BSL初始化失败”是什么原因!…

查看全部问答>

===求助,请问这个是什么芯片呢

[localimg=600,449]1[/localimg] 请问这个是什么压力传感器芯片呢,什么类型的,能达到35MPA,哪个厂家产的呢…

查看全部问答>

atmeg16 UART怪异问题

#include <iom16v.h>#include <macros.h>#define  uchar unsigned char#define  uint  unsigned int#pragma interrupt_handler uart_rx:12uchar rdata,flag=0;void delay(uint ms){     &nbs ...…

查看全部问答>