⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 C
字号:
//-----------------------------------------------------------------
//  名称: DS1621温度传感器实验
//-----------------------------------------------------------------
//  说明: 传感器可检测温度范围为-55.0℃- 125.0℃.
//        程序运行过程中,可通过动态调节温度来模拟外界温度变化,
//        本例中温度通过虚拟终端显示,当模拟外界温度超过上限时,
//        Tout将呈现高电平,继电器吸合,直到温度重新下降到TL之下时,
//        Tout才呈现低电平,断电器断开.
//
//-----------------------------------------------------------------
#include <pic.h>  
#include <string.h>
#include <stdio.h>
#define INT8U   unsigned char
#define INT16U  unsigned int
#define _XTAL_FREQ 4000000UL
//DS1621子器件地址
#define SUB_DEV_ADDR 0x90
//时钟,数据线定义,数据线方向定义
#define SCL RD0
#define SDA RD1
#define SDA_IN()   TRISD1 = 1
#define SDA_OUT()  TRISD1 = 0
char Prompt[] = "Starting...\r";
INT8U d[2] = {0x00,0x00};                        //读取两字节温度数据
INT8U SET_CONFIG[] = {0xAC,0x02};                //写配置字节
INT8U SET_TH[] =     {0xA1,0,0};                 //设置TH
INT8U SET_TL[] =     {0xA2,0,0};                 //设置TL
INT8U START_CONV[]=  {0xEE};                     //启动转换
bit RD_ACK;  INT8U a,b,c;
// IIC启动宏定义 
#define Start() {SDA_OUT(); SCL = 1; NOP(); SDA = 1; NOP(); SDA = 0; NOP();}
//IIC停止宏定义
#define Stop()  {SDA_OUT(); SCL = 1; NOP(); SDA = 0; NOP(); SDA = 1; NOP();}
//-----------------------------------------------------------------
// 发送一字节
//-----------------------------------------------------------------
void SendByte(INT8U dat)
{
    SDA_OUT();//数据方向设为输出

    //8个时钟周期串行输出输出8位(1字节)
    for(INT8U i = 0x80; i != 0x00; i >>= 1)
    {



    }
    //第9个时钟周期拉高SDA,然后读取应答


    //数据线设为输入,读取SDA为低电平时表示从机应答,否则为无应答



}

//-----------------------------------------------------------------
// 接收一字节
//-----------------------------------------------------------------
INT8U RecvByte(INT8U cnt)
{
    INT8U dat = 0x00; 
    SDA_IN(); //设置数据方向为输入
    //8个时钟周期读取1字节数据
    for(INT8U i = 0x80; i != 0x00; i >>= 1)
    {


    }
    //第9个时钟周期发送应答或非应答(温度高字节应答,低字节非应答)


    return dat;
}

//-----------------------------------------------------------------
// 向IIC总线写入多字节
//-----------------------------------------------------------------
void Write_IIC(INT8U slave_addr,INT8U *buff, INT8U n)
{


} 

//-----------------------------------------------------------------
// 串口初始化
//-----------------------------------------------------------------
void Serial_port_init()
{
    SYNC = 0;                              //选择异步通信模式
    BRGH = 1;                              //选择高速波特率发生模式
    TXEN = 1;                              //允许发送数据
    SPBRG = _XTAL_FREQ/16/9600 - 1;        //设置波特率为9600    
    SPEN = 1;                              //串行通信端口打开
    CREN = 1;                              //使能连续接收串行数据
}

//------------------------------------------------------------------
// 通过串口发送一个字符
//------------------------------------------------------------------
void putchar(char c)
{
    //发送一个字符,然后等待发送结束


}

//-----------------------------------------------------------------
// 向串口发送读取的温度
//-----------------------------------------------------------------
void USART_Show()
{




}

//-----------------------------------------------------------------
// 读取温度
//-----------------------------------------------------------------
void Read_Temp()
{



}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
    INT8U i = 0;
    TRISD0 = TRISD1 = 0;                             //SCL,SDA输出    
    Serial_port_init();                              //初始化串口
    while (Prompt[i] != '\0') putchar(Prompt[i++]);  //输出提示字符串

    //配置寄存器的8位配置位为:DONE THF TLF NVB X X POL 1SHOT
    //下面的语句置位POL和1SHOT,设置报警输出时极性为高电平
    //1SHOT设为1时,仅在接收到转换命令时开始转换,设为0时将持续进行转换



    //-------------------------------------------------------------
    // 设置温度上下限,温度高于上限时Tout变为高电平,低于下限时Tout变为低电平
    //-------------------------------------------------------------


    //循环读取并发送串口显示温度
    while(1)
    {   //读取温度,送串口显示,延时200ms  


    }     
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -