[电源] 我的毕业设计更新中

[复制链接]
 楼主| 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--);


}

 楼主| 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);

}

 楼主| 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;
  }
}

 楼主| 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;     
           }
          
          
        }               
}

 楼主| junpeng324 发表于 2018-1-23 14:11 | 显示全部楼层
定时器0 中断 函数   
8位自动重装  用于统计P3^4口的高低电平次数
void time_t0() interrupt 1        //计数器t0溢出中断
{
  TH0=0;
  TL0=0;

}
 楼主| 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++;
}
 楼主| 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
 楼主| junpeng324 发表于 2018-1-23 14:16 | 显示全部楼层
为了检查频率测量的准确性,加了一个单片机来产生1KHZ的方波。
 楼主| 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  方波

                           
}


 楼主| junpeng324 发表于 2018-1-23 14:19 | 显示全部楼层
所有代码在这里贴一下,分享给大家。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| junpeng324 发表于 2018-1-23 14:20 | 显示全部楼层
这次的制作就到这里,下次有好的东西再给大家分享。
Thorald 发表于 2018-1-25 17:06 | 显示全部楼层
楼主实现的什么功能?温度检测、显示??
bxhx 发表于 2018-1-26 10:15 | 显示全部楼层
厉害厉害,赞一个,想我本科毕业的时候简直水的一比
 楼主| junpeng324 发表于 2018-1-26 18:12 | 显示全部楼层
bxhx 发表于 2018-1-26 10:15
厉害厉害,赞一个,想我本科毕业的时候简直水的一比

我这个也很菜
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部