51单片机驱动da1621源程序+Proteus仿真

话不多说,上代码

#include <ds1621.h>



void DelayMS(uint ms)
{
        uchar i;
        while(ms--)
        {
                 for(i=0;i<120;i++);
        }
}


//写
void Master(uchar slave_addr)
{

       
       
       
       
        if(!SCL || !SDA) //sda == 0或scl== 0;
        {}
        else
        {
                 SDA = 0;
                _nop_();
                _nop_();
                SCL = 0;
                _nop_();
                _nop_();
                write_onebyte_iic(slave_addr);
        }
}



void SetTemp(uchar HI,uchar LO)
{
                Master(0x90);
                write_onebyte_iic(0xa1);       
                write_onebyte_iic(HI);
                SendStop();
                DelayMS(10);
                Master(0x90);
                write_onebyte_iic(0xa2);       
                write_onebyte_iic(LO);
                SendStop();
}

void StartConversion()
{
                Master(0x90);
                write_onebyte_iic(0xee);
                SendStop();
                        DelayMS(750);
}
void StopConversion()
{
                Master(0x90);
                write_onebyte_iic(0x22);
                SendStop();
                        DelayMS(750);
}
//读温度
uint ReadTemp()
{
        uint d;
        Master(0x90);
        write_onebyte_iic(0xaa);
        SendStop();
        Master(0x91);
        d =  read_onebyte_iic(0);
        point =  read_onebyte_iic(1)>>7;
        SendStop();
        return d;
}

void WriteConfig(uchar c)
{
        Master(0x90);
        write_onebyte_iic(0xac);
        write_onebyte_iic(c);
        SendStop();
}

最后想要源码的,我会上传到我的资源里,自取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的计算器C语言程序,可以在51单片机上实现,同时也可以在Proteus仿真中运行: ```c #include <reg51.h> // 51单片机头文件 sbit ADD=P3^0; // 加法按键 sbit SUB=P3^1; // 减法按键 sbit MUL=P3^2; // 乘法按键 sbit DIV=P3^3; // 除法按键 sbit CLR=P3^4; // 清零按键 sbit OK=P3^5; // 确认按键 unsigned char num1,num2; // 两个操作数 unsigned char op; // 操作符 unsigned char result; // 运算结果 void delay(unsigned int i) // 延时函数 { unsigned int j,k; for(j=i;j>0;j--) { for(k=110;k>0;k--); } } void display(unsigned char dat) // 数码管显示函数 { P2=dat; // 将数码管的值赋给P2口 delay(5); // 延时一段时间,使数码管显示刷新 } void main() { while(1) { if(ADD==0) // 加法按键按下 { op='+'; delay(10); // 延时去抖 while(ADD==0); // 等待按键释放 } else if(SUB==0) // 减法按键按下 { op='-'; delay(10); // 延时去抖 while(SUB==0); // 等待按键释放 } else if(MUL==0) // 乘法按键按下 { op='*'; delay(10); // 延时去抖 while(MUL==0); // 等待按键释放 } else if(DIV==0) // 除法按键按下 { op='/'; delay(10); // 延时去抖 while(DIV==0); // 等待按键释放 } else if(CLR==0) // 清零按键按下 { num1=0; num2=0; op=0; result=0; display(0xff); // 数码管全灭 delay(10); // 延时去抖 while(CLR==0); // 等待按键释放 } else if(OK==0) // 确认按键按下 { switch(op) // 根据操作符进行运算 { case '+': result=num1+num2; break; case '-': result=num1-num2; break; case '*': result=num1*num2; break; case '/': result=num1/num2; break; } num1=0; num2=0; op=0; display(result); // 显示运算结果 delay(10); // 延时去抖 while(OK==0); // 等待按键释放 } else // 数字键按下 { if(op==0) // 如果操作符为0,表示正在输入第一个操作数 { num1=num1*10+P1; // 将输入的数字累加到num1中 display(num1); // 显示num1 delay(10); // 延时去抖 while(P1!=0xff); // 等待按键释放 } else // 否则表示正在输入第二个操作数 { num2=num2*10+P1; // 将输入的数字累加到num2中 display(num2); // 显示num2 delay(10); // 延时去抖 while(P1!=0xff); // 等待按键释放 } } } } ``` 这个程序实现了简单的加减乘除计算,同时也有清零和确认功能。在程序中,通过检测按键的状态来进行相应的操作。同时,也使用了延时函数和数码管显示函数来实现计算器的基本功能。 在Proteus仿真中,可以使用51单片机模拟器来运行这个程序。将程序烧录到单片机中,然后将数码管和按键连接到相应的引脚上即可。在仿真中,可以通过按下按键来模拟输入数字和操作符,然后观察数码管的显示结果来验证计算器的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(~ ̄▽ ̄)~凤凰涅槃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值