找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1303|回复: 0
打印 上一主题 下一主题
收起左侧

bascomavr_i2c ds1621温度传感器仿真

[复制链接]
跳转到指定楼层
楼主


ds1621温度传感器仿真程序:
rem Main.bas file generated by New Project wizard
rem
rem Created:   周三 10月 25 2023
rem Processor: ATmega88
rem Compiler:  BASCOM-AVR
rem Write your code here

$regfile = "m88def.dat"               
$crystal = 8000000                                       
$hwstack = 40
$swstack = 30
$framesize = 40

'$baud = 19200                         '定义通用异步收发设备BAUD速率
Config Clockdiv = 1                                        ' 确保芯片以8 MHz运行
Config Scl = Portc.5                                        ' 使用i2c引脚
Config Sda = Portc.4
Config Twi = 400000                                         ' i2c 速度
I2cinit
$lib "i2c_twi.lbx"                                          ' 不使用模拟软I2C,使用硬TWI
$lib "glcdSSD1306-I2C.lib"                                  ' 用这个特殊的lib覆盖默认lib
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"


' 声明用于温度存储的 RAM
Dim x As string *2                   '*/-符号
Dim I2ctemp As byte                  '温度存储
Dim I2ctemp1 As byte

'这里使用软件模拟 I2C 例程
' 配置要用于I2C总线的引脚
'Config Scl = Portd.2                 '串行时钟SCL
'Config Sda = Portd.3                 '串行数据SDA
'I2cinit


' 声明常量 - I2C 芯片地址
Const Ds1621wr = &B10010000           '写入Ds1621传感器
Const Ds1621rd = &B10010001           '读取Ds1621传感器
Const TH_XIANZI = 100                 '上限温度(达到上限温度DS1624的TOUT脚输出高电平)。
Const TL_XIANZI = 85                  '下限温度(达到下限温度DS1624的TOUT脚输出低电平)。
'*********************************************************
' 初始化Ds1621
  I2cstart                            '发送启动条件
  I2cwbyte Ds1621wr                   '总线主机发送DS1621地址;R/W=0.

'访问配置寄存器(&HAC 地址字节)
  I2cwbyte &HAC                       '主机发送访问配置命令协议.
'设置连续转换(&H02 命令字节)         
  I2cwbyte &H02                     
  I2cstop                             '发送停止条件
  Waitms 25                           '停止后等待一段时间

  I2cstart                            ''发送启动条件
  I2cwbyte Ds1621wr                   '总线主机发送DS1621地址;R/W=0.
'访问TH(&Ha1 命令字节)
  I2cwbyte &Ha1                       '总线主机发送访问TH(高温)寄存器。命令.
  I2cwbyte TH_XIANZI                  '总线主机发送限制TH(高温)寄存器为上限°C的第一个字节数据
  I2cwbyte &H00                       '总线主机发送限制TH(高温)寄存器为上限°C的第二字节数据。
  I2cstop
Waitms 25
  I2cstart
  I2cwbyte Ds1621wr
  I2cwbyte &Ha2                    '总线主站发送访问 TL(低温)寄存器 命令。
  I2cwbyte TL_XIANZI               '总线主机发送TL(低温)寄存器下限温度°C的第一个字节数据。
  I2cwbyte &H00                    '总线主机发送TL(低温)寄存器下限温度°C的第二个字节数据.
  I2cstop
Waitms 25
  I2cstart
  I2cwbyte Ds1621wr
  I2cwbyte &Hee                   '总线主机发送启动转换T命令协议。
  I2cstop
  Waitms 25
'初始化结束
'********************************************************
'获取当前温度
Do
  I2cstart
  I2cwbyte Ds1621wr
  I2cwbyte &HAA                   '读取温度(和 HAA 命令字节)
I2cstop
Waitms 25
  I2cstart
  I2cwbyte Ds1621rd                '芯片将提供寄存器内容  
'I2crbyte I2ctemp , Ack
  I2crbyte I2ctemp , Nack
  I2cstop

'判断温度值正负符号
if i2ctemp<=255 and i2ctemp>=201 then gosub fwd
if i2ctemp>=0 and i2ctemp<=128 then gosub zwd
if i2ctemp=0  then gosub zxz
Waitms 25
gosub xswd:
Waitms 25
Loop
end
'******************************************************

fwd:        '计算负温度值
  i2ctemp1=256-i2ctemp
x="-"
return

zwd:        '计算正温度值
i2ctemp1=i2ctemp
x="+"
return

zxz:        '零中性值没有+-属性
i2ctemp1=i2ctemp
x=" "
return

'********************************************************
xswd:       '显示温度
Setfont Arial_16x18
Lcdat 1 , 2 ,chr(128);chr(129);chr(130);":";    '显示“温度值”字符串。
Lcdat 4, 36 , x; Str(i2ctemp1) ; chr(127);"  "; '显示:温度值,+、-值符号,摄氏度符号。
Setfont font8x8TT
Lcdat 8 , 16 ,"DS1621_I2C"
return
'******************************************************


$include "../12.font"                                   ' 字体文件
$include "../font8x8TT.font"


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表