介绍了以AT89C51单片机为核心的电烤箱温度控制系统。电烤箱的温度控制系统有两个部分组成:硬件部分和软件部分。其中硬件部分包括:单片机电路、传感器电路、放大器电路、转换器电路、以及键盘和显示电路。软件部分包括:主程序、运算控制程序、以及各功能实现模块的程序。文章最后对本设计进行了总结。对温度控制系统的发展提出了几点建议。
关键词 : 单片机,温度,电烤箱,控制
void keysound() /*按键声音函数 */
{
uchar i;
for ( i = 0; i < 180; i++ )
{
delay0( 5 );
beep = !beep; /* BEEP取反 */
}
}
void I2C_start( void ) /* I2C开始信号 */
{
SDA = 1; SCL = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SDA = 0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL = 0; _nop_(); _nop_();
}
void I2C_stop( void ) /* I2C结束 */
{
SDA = 0; SCL = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SDA = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL = 0;
_nop_(); _nop_();
}
void I2C_no_ackownledge( void ) /* 发送noack信号 */
{
SDA = 1;
_nop_(); _nop_();
SCL = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL = 0;
_nop_(); _nop_(); _nop_();
}
void I2C_sendB( uchar byte ) /* 发送一字节数据 */
{
uchar counter;
for ( counter = 0; counter < 8; counter++ )
{
if ( byte & 0x80 )
SDA = 1;
else SDA = 0;
_nop_();
SCL = 1;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SCL = 0;
_nop_(); _nop_();
byte <<= 1;
}
_nop_(); _nop_();
SDA = 1;
_nop_(); _nop_(); _nop_();
SCL = 1;
_nop_(); _nop_(); _nop_();
if ( SDA == 0 )
ack = 1;
else ack = 0;
SCL = 0;
_nop_(); _nop_();
}
uchar I2C_receiveB( void ) /* 接收一字节数据 */
{
uchar temp;
uchar counter;
temp = 0;
SDA = 1;
_nop_(); _nop_();
for ( counter = 0; counter < 8; counter++ )
{
_nop_(); _nop_(); _nop_();
_nop_(); _nop_();
SCL = 1;
_nop_();
_nop_();
if ( SDA == 1 )
temp = (temp << 1) | 0x01;
else temp = temp << 1;
_nop_(); _nop_();
SCL = 0;
_nop_(); _nop_(); _nop_();
}
_nop_(); _nop_();
return(temp);
}
bit I2C_send_string( uchar *string, uchar no, uchar address ) /* 发送8位温度 */
{
uchar counter;
for ( counter = 0; counter < no; counter++ )
{
I2C_start();
I2C_sendB( C02_write );
if ( ack == 0 )
return(0);
I2C_sendB( address + counter );
if ( ack == 0 )
return(0);
I2C_sendB( string[counter] );
I2C_stop();
delayms( 20 );
}
return(1);
}
bit I2C_receive_string( uchar *string, uchar no, uchar address ) /* 接收8位温度 */
{
uchar counter;
for ( counter = 0; counter < no; counter++ )
{
I2C_start();
I2C_sendB( C02_write );
if ( ack == 0 )
return(0);
I2C_sendB( address + counter );
if ( ack == 0 )
return(0);
I2C_start();
I2C_sendB( C02_read );
if ( ack == 0 )
return(0);
*(string + counter) = I2C_receiveB();
I2C_no_ackownledge();
I2C_stop();
}
return(1);
}
资料下载地址