发新帖我要提问
123
返回列表
打印
[电源]

我的毕业设计更新中

[复制链接]
楼主: junpeng324
手机看帖
扫描二维码
随时随地手机跟帖
41
junpeng324|  楼主 | 2018-1-23 14:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
1MS延时函数
void delay_ms(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
     for(y=110;y>0;y--);


}

使用特权

评论回复
42
junpeng324|  楼主 | 2018-1-23 14:04 | 只看该作者
数码管显示函数 已经做了消隐处理,共阳数码管,可以放在中断里面显示,这样可以让亮度一致,本显示函数是让最后一位多执行一次达到亮度一致。
void smg1(uchar yi,er)
{

  we=1;
  P0=table_we[0];
  we=0;

  P0=0xff;
  du=1;
  P0=table_du[yi];
  du=0;
  P0=0x00;
  delay_ms(1);


  we=1;
  P0=table_we[1];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[er];
  du=0;
  P0=0x00;
  delay_ms(1);

  we=1;
  P0=table_we[1];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[10];
  du=0;
  P0=0x00;
  delay_ms(1);
}
void smg2(uchar san,si)
{

  we=1;
  P0=table_we[2];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[san];
  du=0;
  P0=0x00;
  delay_ms(1);


  we=1;
  P0=table_we[3];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[si];
  du=0;
  P0=0x00;
  delay_ms(1);

  we=1;
  P0=table_we[3];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[10];
  du=0;
  P0=0x00;
  delay_ms(1);
}
void smg3(uchar wu,liu)
{

  we=1;
  P0=table_we[4];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[wu];
  du=0;
  P0=0x00;
  delay_ms(1);

  we=1;
  P0=table_we[5];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[liu];
  du=0;
  P0=0x00;
  delay_ms(1);


  we=1;
  P0=table_we[5];
  we=0;
  P0=0xff;
  du=1;
  P0=table_du[10];
  du=0;
  P0=0x00;
  delay_ms(1);

}

使用特权

评论回复
43
junpeng324|  楼主 | 2018-1-23 14:08 | 只看该作者
//频率处理函数  用于频率的数据采集,采集的周期为1S 在1S内统计高低电平变化的次数。这里是利用T1来产生定时 每1S来统计一下P3^4 口的变化次数  P3^4的变化次数被计数器T0捕获。
void fre_deal()                
{
if(count==100)
  {
        count=0;
        TR0=0;
        TR1=0;
    frenum=TH0*256+TL0;   //计算一秒内高低电平次数
    TH0=0;
    TL0=0;
        TR0=1;
        TR1=1;
  }
}

使用特权

评论回复
44
junpeng324|  楼主 | 2018-1-23 14:10 | 只看该作者
主函数代码


void main()
{       
     timer0init();  //定时器初始化
   yi=1;er=2;san=3;si=4;wu=0;liu=0;   //显示初始化
         fan=1;   //风扇关闭
        while(1)
        {
         
           fre_deal();   //采集频率
           yi=frenum/1000;;er=frenum%1000/100;   //  频率显示数据处理
           san=frenum%100/10;si=frenum%10;       //
            
           temp=Ds18b20ReadTemp();    //采集温度
           wu=temp/10;
              liu=temp%10;
           smg1(yi,er);      //显示频率
           smg2(san,si);
           smg3(wu,liu);   //显示温度
           if((temp>=20)&&(temp!=85))         //温度高于20度 风扇开
           {
                     fan=0;
           }
           else
           {
                     fan=1;     
           }
          
          
        }               
}

使用特权

评论回复
45
junpeng324|  楼主 | 2018-1-23 14:11 | 只看该作者
定时器0 中断 函数   
8位自动重装  用于统计P3^4口的高低电平次数
void time_t0() interrupt 1        //计数器t0溢出中断
{
  TH0=0;
  TL0=0;

}

使用特权

评论回复
46
junpeng324|  楼主 | 2018-1-23 14:13 | 只看该作者
本帖最后由 junpeng324 于 2018-1-23 14:14 编辑

定时器1 中断函数 产生50MS中断   25MHZ晶振

void time_t1() interrupt 3        //定时器t1溢出中断
{
  TH1=(65536-41667)/256;
  TL1=(65536-41667)%256;
  count++;
}

使用特权

评论回复
47
junpeng324|  楼主 | 2018-1-23 14:15 | 只看该作者
temp 头文件

#ifndef __TEMP_H_
#define __TEMP_H_

#include<reg52.h>
//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint unsigned int
#endif

//--定义使用的IO口--//
sbit DSPORT=P3^7;

//--声明全局函数--//
void Delay1ms(uint );
uchar Ds18b20Init();
void Ds18b20WriteByte(uchar com);
uchar Ds18b20ReadByte();
void  Ds18b20ChangTemp();
void  Ds18b20ReadTempCom();
unsigned char Ds18b20ReadTemp();

#endif

使用特权

评论回复
48
junpeng324|  楼主 | 2018-1-23 14:16 | 只看该作者
为了检查频率测量的准确性,加了一个单片机来产生1KHZ的方波。

使用特权

评论回复
49
junpeng324|  楼主 | 2018-1-23 14:18 | 只看该作者
频率产生代码
#include "reg52.h"
//12.00MHZ晶振
//1/12M=0.1us
//0.1*1000=1ms
//1/0.001=1000HZ



sbit led=P3^7;             //频率产生指示

#define uint  unsigned int            
#define uchar unsigned char



bit flag;  

void Timer0Init()
{
        TMOD=0X01;              //选择为定时器0模式,工作方式1,仅用TR0打开启动。
    TH0=(65536-1000)/256;        //给定时器赋初值,定时1ms
        TL0=(65536-1000)%256;       
        ET0=1;                 //打开定时器0中断允许
        EA=1;                  //打开总中断
        TR0=1;                 //打开定时器                       
}
void main()
{       
        Timer0Init();  //定时器0初始化
        while(1);
                       
}


void Timer0() interrupt 1
{
        TH0=(65536-1000)/256;        //给定时器赋初值,定时1ms
        TL0=(65536-1000)%256;
        led=~led;                       //1KHZ  方波

                           
}


使用特权

评论回复
50
junpeng324|  楼主 | 2018-1-23 14:19 | 只看该作者
所有代码在这里贴一下,分享给大家。

温度测量加频率测量程序.rar

47.75 KB

波形产生程序.rar

34.81 KB

使用特权

评论回复
51
junpeng324|  楼主 | 2018-1-23 14:20 | 只看该作者
这次的制作就到这里,下次有好的东西再给大家分享。

使用特权

评论回复
52
Thorald| | 2018-1-25 17:06 | 只看该作者
楼主实现的什么功能?温度检测、显示??

使用特权

评论回复
53
bxhx| | 2018-1-26 10:15 | 只看该作者
厉害厉害,赞一个,想我本科毕业的时候简直水的一比

使用特权

评论回复
54
junpeng324|  楼主 | 2018-1-26 18:12 | 只看该作者
bxhx 发表于 2018-1-26 10:15
厉害厉害,赞一个,想我本科毕业的时候简直水的一比

我这个也很菜

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则