单片机源程序如下:
//**********************************************************************//
//************************* 头文件定义 **********************//
//**********************************************************************//
#include
#include
//宏定义
#define uchar unsigned char
#define uint unsigned int
//温度18b20(数据线端口)
#define tmp (PINB&BIT(PB3))
#define temp_h PORTB |= BIT(PB3)
#define temp_l PORTB &=~BIT(PB3)
#define temp_o DDRB |= BIT(PB3)
#define temp_i DDRB &=~BIT(PB3)
//LCD1602液晶显示(数据线端口)
#define rs_h PORTB |= BIT(PB0)//数据/命令选择
#define rs_l PORTB &=~BIT(PB0)
#define rw_h PORTB |= BIT(PB1)//读/写选择
#define rw_l PORTB &=~BIT(PB1)
#define en_h PORTB |= BIT(PB2)//使能信号
#define en_l PORTB &=~BIT(PB2)
//温度18b20(变量定义)
unsigned char dat1=0x00;//保存读出的温度 L
unsigned char dat2=0x00;//保存读出的温度 H
unsigned long int dat=0;//保存读出的温度 XS
unsigned char flag=0;//错误标志位
//按键定义
unsigned char key1=0;
unsigned char key2=0;
//unsigned char key3=0;
//unsigned char key4=0;
//返回值变量
unsigned char keyvalue=0;
//温度H
unsigned char tempH=30;
//温度L
unsigned char tempL=20;
//**********************************************************************//
//************************* IO 端口定义 **********************//
//**********************************************************************//
void IO_init(void)
{
DDRA = 0XFF;
DDRB = 0XF0;
DDRC = 0XFF;
DDRD = 0XFF;
PORTA = 0X00;
PORTB = 0X00;
PORTC = 0XFF;
PORTD = 0XFF;
}
//**********************************************************************//
//************************* 延时函数 **********************//
//**********************************************************************//
void delayms(uint z) //8M晶振下,延时1ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=1333;y>0;y--);
}
//**********************************************************************//
//*************************** 18B20 ************************//
//**********************************************************************//
void Ds18b20_reset(void)//DS18B20初始化
{
uint count;
temp_o;
temp_l;
for(count=700;count>0;count--);//延时480us
temp_h;
temp_i;//不须配置PORT内部上拉电阻,MCU输入输出自动切换
while((tmp==0x08));//&&(i>0)) i--;
for(count=700;count>0;count--);//延时480us
}
void Ds18b20_write(uchar dat)//向DS18B20写一个字节
{
uchar count;
uchar i;
temp_o;
for(i=8;i>0;i--)
{
temp_l;
for(count=2;count>0;count--);
//temp_h;//不能有此语句
if(dat&0x01==0x01)
temp_h;
else
temp_l;
for(count=120;count>0;count--);//延时60us
temp_h;
dat>>=1;
}
}
uchar Ds18b20_read(void)//从DS18B20读一个字节
{
uchar i,datt;
uchar count;
for(i=8;i>0;i--)
{
datt>>=1;
temp_o;
temp_l;
for(count=2;count>0;count--);
temp_h;//此语句必须有,参考datasheet的P15
for(count=1;count>0;count--);
temp_i;
if(tmp==0x08)
datt|=0x80;
for(count=120;count>0;count--); //延时60us
}
return datt;
}
void temp_Read(void)//温度读取
{
Ds18b20_reset();//DS18B20初始化
Ds18b20_write(0xcc);//跳过ROM
Ds18b20_write(0x44);//发送温度转换命令
delayms(1000);//延时1s,等待温度转换完成
Ds18b20_reset();//DS18B20初始化
Ds18b20_write(0xcc);//跳过ROM
Ds18b20_write(0xbe);//发送读温度寄存器命令
dat1=Ds18b20_read();//读温度值的低字节
dat2=Ds18b20_read();//读温度值的高字节
}
void temp_display(void)//温度显示
{
if(dat2>=240)//dat2温度值的高字节为1时为负温度
{
dat=(~(dat2*256+dat1)+1)*0.625;//负温度:取反加一,保留一位小数
flag=1;
}
else
{
dat=(dat2*256+dat1)*0.625;
flag=0;
}
if(flag==1)//负温度显示
{
LCD_write_str(0,0," 18B20 ");
LCD_write_str(3,1,"Temp:");
LCD_write_str(8,1,"-");// 符号“- ”
LCD_write_char(9,1,0x30+dat/1000);
LCD_write_char(10,1,0x30+dat%1000/100);
LCD_write_char(11,1,0x30+dat%100/10);
LCD_write_str (12,1,".");// 符号“. ”
LCD_write_char(13,1,0x30+dat%10);
}
if(flag==0)//正温度显示
{
LCD_write_str(0,0," 18B20 ");
LCD_write_str(3,1,"Temp:");
LCD_write_str(8,1," ");// 符号“+ ”
LCD_write_char(9,1,0x30+dat/1000);
LCD_write_char(10,1,0x30+dat%1000/100);
LCD_write_char(11,1,0x30+dat%100/10);
LCD_write_str (12,1,".");// 符号“. ”
LCD_write_char(13,1,0x30+dat%10);
}
}
void tempH_Setting(void)//最高温度设置显示
{
LCD_write_str(0,0," temp(H)Setting ");
LCD_write_char(6,1,0x30+tempH%1000/100);
LCD_write_char(7,1,0x30+tempH%100/10);
LCD_write_char(8,1,0x30+tempH%10);
}
void tempL_Setting(void)//最低温度设置显示
{
LCD_write_str(0,0," temp(L)Setting ");
LCD_write_char(6,1,0x30+tempL%1000/100);
LCD_write_char(7,1,0x30+tempL%100/10);
LCD_write_char(8,1,0x30+tempL%10);
}
void temp_police(void)//温度报警
{
if(dat/10>=tempH)//最高检测温度>=设定温度:灯亮
{
PORTC&=~BIT(7);
上一篇:AVR单片机串口USART与PC通讯实例,讲解原理和程序
下一篇:atmega128 AD 转换
推荐阅读
史海拾趣
“创新动力”是Discrete Semiconductor Industries公司中一家以创新驱动发展的典范。该公司注重研发投入,积极引进和培养科技人才,建立了完善的研发体系。通过不断的技术创新和产品升级,创新动力不断推出具有市场竞争力的新产品。同时,公司还积极探索新的应用领域和市场机会,不断拓展业务范围。这种创新驱动的发展战略使得创新动力在激烈的市场竞争中保持了强劲的发展势头。
随着科技的不断进步,BJB公司意识到技术创新的重要性。因此,公司加大了研发投入,积极引进先进的技术和设备,致力于照明配件产品的创新和升级。经过不懈的努力,BJB成功研发出具有高效节能、环保低碳特点的照明配件产品,不仅提升了产品的性能和质量,也满足了客户对绿色照明的需求。
CTS公司,全称CTS Corporation,于1896年在美国印第安那州创立。在创立初期,公司主要生产和销售电器元件,凭借对技术的深入理解和市场需求的敏锐洞察,逐渐在行业中崭露头角。随着业务的扩展,CTS的产品线逐渐丰富,涵盖了汽车及电脑配件、通讯产品、精密仪器及装置等多个领域。
随着技术的不断进步和市场需求的不断变化,Elekon意识到只有不断创新才能保持竞争力。因此,公司加大了研发投入,致力于技术创新和产品升级。经过多年的努力,Elekon成功开发出一系列具有自主知识产权的电子产品,包括高性能的集成电路、智能传感器等。这些新产品的推出不仅丰富了Elekon的产品线,也提升了公司的市场竞争力。
进入21世纪后,Etco Inc公司意识到全球化趋势的不可逆转。为了拓展国际市场,公司决定实施全球化战略。首先,公司在美国本土之外建立了多个生产基地和研发中心,以便更好地满足全球客户的需求。其次,Etco加强了与国际客户的合作与交流,积极参与国际展览和研讨会,提高了品牌知名度和影响力。这些举措使Etco在全球电子连接器市场中的份额不断攀升。
面对数字化浪潮的冲击,DILABS积极拥抱变革。他们加大了对人工智能、物联网等前沿技术的研发投入,推动公司向数字化转型。同时,DILABS还积极参与行业标准的制定和推广工作,为电子行业的未来发展贡献自己的力量。展望未来,DILABS将继续秉承创新、品质、环保和数字化的理念,为全球客户提供更加优质、高效的电子产品和服务。
嗨, 本来想看点电视节目的,关注关注国家大事什么的............... 但是还是习惯看看单片机论坛,查查资料什么的 ............ 我这陋习真难改...........… 查看全部问答∨ |
|
公司:佳能 职位:研发工程师 语言:c/c++ 平台:WINCE 经验:3年以上 地点:北京 有意向者,请速联系 msn:mygy2006@hotmail.com 13910500391… 查看全部问答∨ |
|
前两天你在网上下了个700多M的keil3来用!好不容易装好了发现memory window 里没法显示内存数据! 看了半天发现是字体的问题,memory window 的字体默认的是1295711,一般编译框里字体是10或0,但是没办法修改!今天弄了一天都没办法,字体太小, ...… 查看全部问答∨ |
我装了wince4.2 再装了EVC4.0 后来装了STANDARD_SDK.msi 写了个简单的hello程序 想调用SIP 头文件包含了#include "sipapi.h" 工程里添加了连接coredll.lib,调用SipShowIM(SIPF_ON); 怎么就是编译不过去 提示如下 Mystest.obj : error LNK2019 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 【把你我的经验串一串,共享丰收】EEWORLD优秀主题/回复第17期活动开始拉
- 趣味电子技术史话之通信技术史——科技与人文的结合,传奇故事在这里!
- 呼朋换友学电源,知识、好礼赢在手!
- TI首届低功耗设计大赛之玩转MSP430 FRAM MCU
- 分享、评论《Vishay光电子博文》尽享精彩好礼!
- TI 嵌入式处理器最新产品发布会 全程在线直播 4月16日精彩为您呈现!预报名、看直播、享好礼
- 【EEWORLD大学堂】玩转LaunchPad及TI MSP430G2XX系列超值单片机!!!
- 基于PolarFire® SoC FPGA的Microchip非对称多处理(AMP)解决方案
- “传感器文旅”小调查:你比较期待哪类传感器的主题文旅?