历史上的今天
返回首页

历史上的今天

今天是:2024年10月29日(星期二)

正在发生

2019年10月29日 | 基于单片机的车辆超载监测系统

2019-10-29 来源:51hei

车辆超载检测仿真原理图如下

电子地秤单片机源程序如下:


//线性区间标度变换公式:    y=(115-15)/(243-13)*X+15kpa   



#include  

#include

#include



#define R24C04ADD 0xA1

#define W24C04ADD 0xA0


//ADC0832的引脚

sbit ADCS =P2^2;  //ADC0832 chip seclect

sbit ADDI =P2^4;  //ADC0832 k in

sbit ADDO =P2^4;  //ADC0832 k out

sbit ADCLK =P2^3;  //ADC0832 clock signal



sbit SDA = P2 ^ 1;                                //数据线

sbit SCL = P2 ^ 0;                                //时钟线

bit bAck;                                          //应答标志 当bbAck=1是为正确的应答


unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};  //位扫描

unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};  //共阳数码管字段码

unsigned char dispbuf[4];

unsigned int temp;

unsigned char getdata; //获取ADC转换回来的值



void delay_1ms(void)  //12mhz delay 1.01ms

{

   unsigned char x,y;   

   x=3;

   while(x--) 

  {

       y=40;

       while(y--);

    }

}

void display(void)  //数码管显示函数

{

  char k;

  for(k=0;k<4;k++)

  {


  P1 = dispbitcode[k];

  P0 = dispcode[dispbuf[k]];

  if(k==1)          //加上数码管的dp小数点

          P0&=0x7f;

  delay_1ms();          

  }

}


/************

读ADC0832函数

************/


//采集并返回

unsigned int Adc0832(unsigned char channel)     //AD转换,返回结果

{

    unsigned char i=0;

    unsigned char j;

    unsigned int dat=0;

    unsigned char ndat=0;


    if(channel==0)channel=2;

    if(channel==1)channel=3;

    ADDI=1;

    _nop_();

    _nop_();

    ADCS=0;//拉低CS端

    _nop_();

    _nop_();

    ADCLK=1;//拉高CLK端

    _nop_();

    _nop_();

    ADCLK=0;//拉低CLK端,形成下降沿1

    _nop_();

    _nop_();

    ADCLK=1;//拉高CLK端

    ADDI=channel&0x1;

    _nop_();

    _nop_();

    ADCLK=0;//拉低CLK端,形成下降沿2

    _nop_();

    _nop_();

    ADCLK=1;//拉高CLK端

    ADDI=(channel>>1)&0x1;

    _nop_();

    _nop_();

    ADCLK=0;//拉低CLK端,形成下降沿3

    ADDI=1;//控制命令结束 

    _nop_();

    _nop_();

    dat=0;

    for(i=0;i<8;i++)

    {

        dat|=ADDO;//收数据

        ADCLK=1;

        _nop_();

        _nop_();

        ADCLK=0;//形成一次时钟脉冲

        _nop_();

        _nop_();

        dat<<=1;

        if(i==7)dat|=ADDO;

    }  

    for(i=0;i<8;i++)

    {

        j=0;

        j=j|ADDO;//收数据

        ADCLK=1;

        _nop_();

        _nop_();

        ADCLK=0;//形成一次时钟脉冲

        _nop_();

        _nop_();

        j=j<<7;

        ndat=ndat|j;

        if(i<7)ndat>>=1;

    }

    ADCS=1;//拉低CS端

    ADCLK=0;//拉低CLK端

    ADDO=1;//拉高数据端,回到初始状态

    dat<<=8;

    dat|=ndat;

    return(dat);            //return ad k

}


//启动I2C总线,即发送起始条件

void StartI2C()

{

        SDA = 1;                              //发送起始条件数据信号

        _nop_();

        SCL = 1;

        _nop_();                                    //起始建立时间大于4.7us

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        SDA = 0;                              //发送起始信号

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        SCL = 0;                                //时钟操作

        _nop_();

        _nop_();

}

//结束I2C总线,即发送I2C结束条件

void StopI2C()

{

        SDA = 0;                                //发送结束条件的数据信号

        _nop_();                                      //发送结束条件的时钟信号

        SCL = 1;                                //结束条件建立时间大于4us

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        SDA = 1;                                //发送I2C总线结束命令

        _nop_();

        _nop_();

        _nop_();

        _nop_();

        _nop_();        

}

//发送一个字节的数据

void        SendByte(unsigned char c)

{

        unsigned char BitCnt;

        for(BitCnt = 0;BitCnt < 8;BitCnt++)                                  //一个字节

                {

                        if((c << BitCnt)& 0x80) SDA = 1;                   //判断发送位

                        else        SDA = 0;

                        _nop_();

                        SCL = 1;                              //时钟线为高,通知从机开始接收数据

                        _nop_();

                        _nop_();

                        _nop_();

                        _nop_();

                        _nop_();

                        SCL = 0;

                }

        _nop_();

        _nop_();

        SDA = 1;                                                //释放数据线,准备接受应答位

        _nop_();

        _nop_();

        SCL = 1;

        _nop_();

        _nop_();

        _nop_();

        if(SDA == 1) bAck =0;

        else bAck = 1;                                                //判断是否收到应答信号

        SCL = 0;

        _nop_();

        _nop_();

}

//接收一个字节的数据

unsigned char RevByte()

{

        unsigned char retc;

        unsigned char BitCnt;

        retc = 0;

        SDA = 1;

        for(BitCnt=0;BitCnt<8;BitCnt++)

        {

                _nop_();

                SCL = 0;                                            //置时钟线为低,准备接收

                _nop_();

                _nop_();

                _nop_();

                _nop_();

                _nop_();

                SCL = 1;                                            //置时钟线为高使得数据有效

                _nop_();

                _nop_();

                retc = retc << 1;                                    //左移补零

推荐阅读

史海拾趣

Fischer Connectors公司的发展小趣事

Fischer Connectors公司在电子行业中的五个发展故事

故事一:创立与初期发展

Fischer Connectors的故事始于1954年,由真空技术专家Walter Werner Fischer在瑞士沃州的莫尔日创立。他凭借对技术的热爱和执着,开发出了世界上第一个高品质密封连接器,专为工业应用而设计。这一创新产品迅速赢得了市场的认可,为公司的发展奠定了坚实的基础。在随后的几年里,Fischer Connectors不断优化产品,并于1962年注册了推拉锁定系统的国际专利,进一步巩固了其在连接器行业的领先地位。

故事二:全球扩张与国际合作

随着业务的不断增长,Fischer Connectors开始积极寻求全球扩张的机会。1988年,公司在英国成立了第一家子公司,标志着其国际商业活动的正式开始。此后,Fischer Connectors相继在欧洲的德国、意大利、法国以及美国等地开设了子公司,形成了全球性的生产和服务网络。这些子公司不仅为当地市场提供了高质量的连接器产品,还促进了Fischer Connectors在全球范围内的技术创新和市场拓展。

故事三:技术创新与产品线扩展

Fischer Connectors始终将技术创新作为企业发展的核心驱动力。进入21世纪后,公司推出了一系列具有创新性的连接器产品,如Fischer Core系列塑料连接器、AluLite™超轻铝连接器以及Fischer UltiMate™系列超坚固连接器等。这些产品不仅满足了不同行业对连接器性能的多样化需求,还推动了整个电子行业的技术进步。同时,Fischer Connectors还不断扩展其产品线,涵盖了多极低电压连接器、同轴高电压连接器等多个领域,进一步巩固了其在连接器市场的领先地位。

故事四:应对行业挑战与定制化解决方案

随着电子行业的快速发展,连接器和线缆系统的应用环境越来越复杂多样。Fischer Connectors凭借其在技术、质量和服务方面的优势,积极应对行业挑战,为客户提供定制化的解决方案。公司拥有一支专业的研发团队和客户服务团队,能够深入了解客户的实际需求,量身定制出最适合客户应用方案的连接器与线缆系统。这种以客户为中心的服务理念赢得了广大客户的信赖和支持。

故事五:数字化转型与可持续发展

近年来,Fischer Connectors积极响应数字化转型的浪潮,利用先进的技术手段提升生产效率和产品质量。公司投入大量资源建设智能化生产线和数字化管理系统,实现了从原材料采购、生产加工到成品出库的全流程信息化管理。同时,Fischer Connectors还注重可持续发展,致力于开发环保型连接器和线缆系统,减少对环境的影响。这些努力不仅提升了公司的竞争力,还为公司赢得了更多的社会认可和赞誉。

Advantech公司的发展小趣事

Advantech公司是一家全球领先的工业计算机、自动化和嵌入式解决方案提供商,其发展历程充满了创新、合作和技术进步。以下是关于Advantech公司发展的五个相关故事:

  1. 创立与早期发展: Advantech公司成立于1983年,最初名为台湾多媒体公司,其初衷是提供音频和视频卡。随着技术的发展和市场需求的变化,公司逐渐转型为提供工业计算机和自动化解决方案的领先供应商。

  2. 全球化战略: 随着全球市场的不断扩大,Advantech制定了全球化战略,积极拓展海外业务。1994年,公司在美国成立了第一家子公司,标志着其国际化发展的开始。此后,Advantech陆续在欧洲、亚洲和其他地区建立了办事处和分支机构,构建起了覆盖全球的销售和服务网络。

  3. 技术创新与合作伙伴关系: 作为工业自动化领域的领导者之一,Advantech不断进行技术创新,并与全球各类合作伙伴密切合作。公司积极投入研发资金,不断推出新产品和解决方案,以满足客户不断变化的需求。同时,Advantech与众多软件和硬件供应商建立了紧密的合作关系,共同推动行业的发展。

  4. 智能化转型: 随着工业4.0和物联网的迅速发展,Advantech积极响应智能化转型的趋势,推出了一系列智能化解决方案,涵盖工业自动化、智慧城市、智能交通等多个领域。公司致力于为客户提供智能化、数字化的整体解决方案,助力其实现生产效率提升和智能化升级。

  5. 生态系统建设: 为了进一步提升解决方案的综合性和竞争力,Advantech积极构建生态系统,与行业合作伙伴共同打造全方位的服务体系。公司通过开放式的合作模式,与合作伙伴共享资源和技术,实现优势互补,共同拓展市场,推动行业的发展和进步。

以上述五个方面为基础,Advantech在电子行业中不断发展壮大,成为了全球工业自动化和智能化领域的领导者之一。

Deutronic Elektronik GmbH公司的发展小趣事

随着技术的不断进步和市场的扩大,Deutronic Elektronik GmbH开始寻求技术突破和业务拓展。公司加大了研发投入,推出了一系列具有创新性的电源供应器、电子模块和测试检查系统。这些产品不仅满足了客户的多样化需求,还为公司带来了显著的经济效益。同时,公司也积极拓展海外市场,逐步建立了全球销售和服务网络。

Cableform Inc公司的发展小趣事

2012年,对于Cableform Inc来说是一个重要的转折点。这一年,公司成功加入了HUBBELL系列,与Hubbell工业控制有限公司建立了战略合作关系。这一合作使得Cableform Inc能够借助Hubbell的品牌影响力和市场渠道,进一步拓展业务范围,提升市场地位。同时,通过与Hubbell的技术交流和资源共享,Cableform Inc在技术创新和产品升级方面也取得了显著进展。

EVERLIGHT公司的发展小趣事

进入21世纪,随着全球电子产业的快速发展,EVERLIGHT迎来了市场扩张的机遇。公司不仅巩固了在台湾市场的领先地位,还积极开拓国际市场。通过与国际知名品牌的合作,EVERLIGHT的产品逐渐进入全球市场,赢得了广泛认可。同时,公司还加强了对新兴市场的开拓,如中国大陆、东南亚等地区,为公司的持续发展注入了新的动力。

Cyrustek公司的发展小趣事

作为一家具有社会责任感的企业,Cyrustek始终注重可持续发展。在产品设计和生产过程中,Cyrustek注重环保和节能,积极采用环保材料和绿色生产工艺。同时,Cyrustek还积极参与社会公益事业,为社会做出了积极贡献。这种对社会责任的关注和履行,不仅提高了Cyrustek的品牌形象,也为其在电子行业中赢得了更多的尊重和信任。

以上五个故事仅为示例,并不代表Cyrustek公司的真实历史。在实际应用中,这些故事可以根据Cyrustek公司的具体情况进行调整和修改。

问答坊 | AI 解惑

单脉冲序列对双激式开关电源变压器铁心的磁化开关电源原理与设计(连载53)

2-1-1-4.脉冲序列对双激式开关电源变压器铁心的磁化 双激式变压器与单激式变压器的区别主要是两者输入电压的参数不一样。单激式变压器输入的电压是单极性直流脉冲,而双激式变压器输入的电压是双极性交流脉冲。为了简单起见,我们把双激式变压器 ...…

查看全部问答>

数字视频监控硬件设计经验谈

数字视频监控系统主要包括DVR、DVS、IP-Camera等,涉及到嵌入式系统技术、视频编解码技术、音频编解码技术、联网及域名处理技术等。硬件对于系统而言,相当于建筑的地基,地基牢,建筑才可靠,才能够经历风风雨雨的考验。     概述 & ...…

查看全部问答>

LED结构、发光原理、光源特点及应用

replyreload += \',\' + 384127;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

IOCTL CODE DeviceIoControl

我做摄像头的数据采集,用CreateFile打开设备,然后调用DeviceIoControl函数,第二个参数需要的是控制CODE,这个CODE需要驱动来提供?不是标准调用吧。如果驱动没有提供读数据的控制CODE,那我是不是就没有办法用DeviceIoControl得到数据了?…

查看全部问答>

vhdl, 怎么实现让输出维持一段时间后撤销

vhdl, 怎么实现让输出维持一段时间后撤销~~~~~ 请大侠,帮忙~…

查看全部问答>

PCI 接口 IO读写 驱动

driverStudio 生成的驱动程序 实现 IO读写功能 驱动程序代码中两个操作如下: NTSTATUS RW6070Device::RW6070_IOCTL_800_Handler(KIrp I) {         NTSTATUS status = STATUS_SUCCESS;         //t …

查看全部问答>

stm32sd卡咨询

                                 各位大侠请问,stm32有没有通过spi读取sd卡的例程,或者哪位大哥自己做过这一块可以指点一下小弟,我刚开始做这一 ...…

查看全部问答>

ST中国微控制器中文下载怎么都挂了?

                                 RT…

查看全部问答>

RT-Thread开源实时操作系统/STM32F103VB0.3.0b3版本

这个版本更新有些多,RT-Thread/STM32F103VB 0.3.0 beta3更改记录:- 内核,添加IAR EWARM 5.x工程,在内核定义中做相应的平台定义;- 添加文件系统组件DFS,DFS是一套虚拟文件系统(类似Linux的VFS,但几乎不占 ...…

查看全部问答>

有关2812的资料其寄存器都没有地址,谁那有?

有关2812的资料其寄存器都没有地址,所见的都是C语言的头文件,用了结构体和共用体,找不出起物理地址了,想用一段汇编,找不到外设和寄存器的地址,没法编那.谁有这方面的资料?或给指点一下…

查看全部问答>