用单片机设计一个举重运动的裁判器的基本代码
时间: 2023-07-16 19:11:55 浏览: 82
下面是一个基本的举重运动裁判器的单片机代码,适用于一些常见的单片机(如STC89C52等)。这个裁判器可以检测举重器材上的重量,用于判断选手是否完成了规定的举重动作。
```c
#include <reg52.h> //此处使用STC89C52单片机头文件
sbit SDA=P2^0; //定义DS18B20的三个接口
sbit SCL=P2^1;
sbit RST=P2^2;
unsigned char temp=0;
unsigned char flag=0;
unsigned char code Table[]="Weight:"; //显示重量的标签
void delay(unsigned int time) //延时函数
{
unsigned int i,j;
for(i=time;i>0;i--)
for(j=110;j>0;j--);
}
void Init_DS18B20(void) //初始化DS18B20温度传感器
{
RST=0; //复位DS18B20
delay(1); //延时保持低电平
RST=1; //释放复位信号
delay(1); //延时保持高电平
}
void Write_DS18B20(unsigned char dat) //向DS18B20写入数据
{
unsigned char i;
for(i=0;i<8;i++)
{
SDA=dat&0x01; //写入最低位数据
dat>>=1; //右移一位,准备写入下一个数据
SCL=1; //产生上升沿
_nop_(); //空操作,延时1us
_nop_();
_nop_();
SCL=0; //产生下降沿
_nop_();
_nop_();
}
}
unsigned char Read_DS18B20(void) //从DS18B20读取数据
{
unsigned char i,dat=0;
for(i=0;i<8;i++)
{
SCL=1; //产生上升沿
_nop_(); //空操作,延时1us
_nop_();
_nop_();
dat>>=1; //读取最低位数据
if(SDA) dat|=0x80; //如果SDA=1,则将最高位赋值为1;否则最高位默认为0
SCL=0; //产生下降沿
_nop_();
_nop_();
}
return dat;
}
void Display_DS18B20(void) //显示DS18B20读到的重量
{
unsigned char i;
Write_DS18B20(0xCC); //跳过ROM读取
Write_DS18B20(0x44); //启动DS18B20温度转换
delay(1); //等待转换结束
Init_DS18B20(); //重新初始化DS18B20
Write_DS18B20(0xCC); //跳过ROM读取
Write_DS18B20(0xBE); //读取DS18B20的温度值
temp=Read_DS18B20(); //读取温度数据的低八位
temp=Read_DS18B20(); //读取温度数据的高八位
P0=0x80; //给数码管显示器发送译码信号
for(i=0;i<7;i++)
{
P2=0xFE; //选择第一个数码管
P0=Table[i]; //发送显示的标签字符
delay(5); //延时等待显示出来
P2=0xFF; //关闭数码管
P2=0xFD; //选择第二个数码管
P0=temp/10; //发送十位数字
delay(5); //延时等待显示出来
P2=0xFF; //关闭数码管
P2=0xFB; //选择第三个数码管
P0=temp%10; //发送个位数字
delay(5); //延时等待显示出来
P2=0xFF; //关闭数码管
}
}
void main(void) //主函数
{
while(1)
{
Display_DS18B20(); //显示DS18B20读到的重量
}
}
```
此处代码仅供参考,实际使用时需要根据具体的硬件平台和需求进行修改。
阅读全文