2个c语言不同的程序合并在一起,求助怎么把两个单片机c语言程序结合在一起?大一期末实验...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*

DS18B20数字温度传感器 (温度控制)

实验连线

单片机的P3.3连接DS18B20单元的 DQ

单片机的P3.2连接继电器单元的 JIN

继电器单元的JZ连接GND

继电器单元的JK连接DS18B20单元的 HOT

*/

#include

#include

#include

#define SETVAL 30 //设定温度值

xdata unsigned char CS8279C _at_ 0xfff1;

xdata unsigned char CS8279D _at_ 0xfff0;

sbit HOT = P3^2;

sbit DQ = P3^3;

unsigned char LedBuf[6] = {21,21,21,21,21,21}; //显示缓冲

code unsigned char LedMap[] = //LED字形代码表

{

0x0c, 0x9f, 0x4a, 0x0b, 0x99, 0x29, 0x28, 0x8f, 0x08, 0x09, //0~9

0x04, 0x97, 0x42, 0x03, 0x91, 0x21, 0x20, 0x87, 0x00, 0x01, //0.~9.

0xfb, 0xff //'-', ' '

};

//延时函数, 对于11.0592MHz时钟, 例i=10,约延时10ms.

void delay(unsigned int t)

{

for(; t>0; t--);

}

//对DS18B20的初始化

unsigned char Reset_DS18B20(void)

{

unsigned char presence;

DQ = 1; _nop_(); _nop_();

DQ = 0; delay(50); // 550us

DQ = 1; delay(6); // 66us

presence = DQ; delay(50);

if (presence) //为1初始化失败,为0初始化成功

return 0x00;

else

return 0x01;

}

//读一个字节

unsigned char ReadOneChar(void)

{

unsigned char i, dat = 0;

for(i=8; i>0; i--)

{

dat>>=1;

DQ = 1; _nop_(); _nop_();

DQ = 0; _nop_(); _nop_(); _nop_(); _nop_(); //4us

DQ = 1; _nop_(); _nop_(); _nop_(); _nop_(); //4us

if(DQ) dat |= 0x80;

delay(6); //66us

}

DQ = 1; _nop_();

return(dat);

}

//写一个字节

void WriteOneChar(unsigned char dat)

{

unsigned char i;

for (i=8; i>0; i--)

{

DQ = 1; _nop_(); _nop_();

DQ = 0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();//5us

DQ = dat & 0x01; //最低位移出

delay(6); //66us

dat >>= 1;

}

DQ = 1; _nop_();

}

//启动ds1820转换

void DS1820_start(void)

{

Reset_DS18B20();

WriteOneChar(0xCC); //勿略地址

WriteOneChar(0x44); //启动转换

}

//读温度值

unsigned int ReadTemperature(void)

{

unsigned int i;

unsigned char buf[9];

Reset_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器

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

buf[i] = ReadOneChar(); //读9位温度值

i = buf[1];

i <<= 8;

i |= buf[0];

return i;

}

//8279显示

void disp8279(void)

{

unsigned char i, j = 0x85;

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

{

CS8279C = j--;

CS8279D = LedMap[LedBuf[i]];

}

}

void main(void)

{

float temp;

int value;

//初始化8279

CS8279C = 0x00; //8个8位显示

CS8279C = 0x32; //设分频初值

CS8279C = 0xdf; //清显示

while( !(CS8279C & 0x80) ); //等待8279就绪

LedBuf[0] = 21; //第1位不显示

HOT = 1; //初始时不加热

while(1)

{

DS1820_start(); //启动转换

delay(80);

temp = ReadTemperature() * 0.0625; //读温度值

if(temp < 0)

LedBuf[1] = 20; //第2位显示负号

else

LedBuf[1] = 21; //第2位不显示

value = temp * 100 + (value > 0? 0.5 : -0.5); //大于0加0.5, 小于0减0.5

value = abs(value);

//设置值

LedBuf[0] = (SETVAL % 100) / 10;

LedBuf[1] = SETVAL % 10;

//实测值

LedBuf[4] = (value % 10000) / 1000;

LedBuf[5] = ((value % 1000) / 100);

if(value / 100 < SETVAL) HOT = 0; //开始加热

else HOT = 1; //停止加热

disp8279();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值