历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2020年02月15日 | MSP430 IIC通信

2020-02-15 来源:eefocus

#include

 

#define OP_READ 0xa1                    //器件地址读

#define OP_WRITE 0xa0                   //器件地址写

#define uchar unsigned char

#define uint unsigned int 

#define SDA_OUT P1DIR |= BIT3

#define SDA_IN P1DIR &= ~BIT3

#define SCL_OUT P1DIR |= BIT2

#define SCL_IN P1DIR &= ~BIT2

 

#define SDA_H P1OUT |= BIT3

#define SDA_L P1OUT &= ~BIT3

#define SCL_H P1OUT |= BIT2

#define SCL_L P1OUT &= ~BIT2

 

#define wei_h P5OUT |= BIT5

#define wei_l P5OUT &= BIT5

#define duan_l P6OUT &= ~BIT6

#define duan_h P6OUT |= BIT6

 

uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

 

uchar miao;

uchar write;

int num;

void delayus(uint z)

{

  uint i,j;

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

    for(j=0;j    {;;};

}

 

void start()

{

  SDA_OUT;

  SCL_OUT;

  SDA_H;

  SCL_H;

  delayus(1);

  SDA_L;

  delayus(2);

  SCL_L;

}

 

void stop()

{

  SDA_OUT;

  SCL_OUT;

  SDA_L;

 

  delayus(2);

  SCL_H;

  delayus(2);

  SDA_H;

}

 

void Ack24()

{

  SDA_OUT;

  SCL_OUT;

  SDA_H;

  SCL_H;

 

  delayus(2);

  SDA_IN;

  while(P1IN & BIT3)

      SCL_L;

  delayus(2);

}

//mcu读取数据

uchar read_byte()

{

  uchar i,read_data;

  SDA_OUT;

  SCL_OUT;

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

  {

    SDA_H;

    delayus(1);

    SCL_H;

    SDA_IN;

    read_data <<= 1;

    if(P1IN & BIT3)

      read_data |= 0x01;

      SDA_OUT;

      SCL_L;   

  }

  return(read_data);

}

 

void write_byte(uint dat)

{

  uchar i;

  SDA_OUT;

  SCL_OUT;

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

  {

    if(dat&0x80)

      SDA_H;

    else

      SDA_L; 

    delayus(2);

    SCL_H;

    delayus(2);

    SCL_L;

    delayus(2);

    dat <<= 1;

  }

  SCL_L;

  delayus(2);

  SDA_H;

  delayus(2);

}

 

//向指定地址写数据

void write_dat(uchar addr,uchar write_data)

{

  SDA_OUT;

  SCL_OUT;

  SDA_H;

  SCL_H;

  start();

  write_byte(OP_WRITE);

  Ack24();

  write_byte(addr);

  Ack24();

  write_byte(write_data);

  Ack24();

  stop();

  delayus(1000);

}

//从指定地址读数据

uchar read_random(uint random_addr)

{

  uchar i;

  SDA_OUT;

  SCL_OUT;

  SDA_H;

  SCL_H;

  start();

  write_byte(OP_WRITE);

  Ack24();

  write_byte(random_addr);

  Ack24();

  start();

  write_byte(OP_READ);

  Ack24();

  i = read_byte();

  stop();

  return i;

}

 

void display(uchar dat)

{

  P4OUT = table[dat];

  duan_h;

  duan_l;

  P4OUT = ~(1 << num);

  wei_h;

  wei_l;

}

 

void Clock(void)

{

  miao++;

  if(miao==10)

    miao=0;

}

 

void main( void )

{

  P1DIR = 0XFF,P1OUT = 0XFF;

  P2DIR = 0XFF,P2OUT = 0XFF;

  P3DIR = 0XFF,P3OUT = 0XFF;

  P4DIR = 0XFF,P4OUT = 0XFF;

  P5DIR = 0XFF,P5OUT = 0XFF;

  P6DIR = 0XFF,P6OUT = 0XFF;

  

  SDA_OUT;

  SCL_OUT;

  SDA_H;

  SCL_L;

  

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;

  CCR0 = 32768 -1;

  TACTL = TASSEL_1 + MC_1;

  CCTL0 |= CCIE;

  _EINT();

 

  miao = read_random(3);

  if(miao>9) miao=0;

  

  while(1)

  {

    display(miao);

    if(write==1)

    {

      write = 0;

      write_dat(3,miao);

    }

    LPM3;

  }

}

 

#pragma vector = TIMERA0_VECTOR

__interrupt void TimerA_ISR(void)

{

  Clock();

  write = 1;

  LPM3_EXIT;

}


推荐阅读

史海拾趣

喜美克斯(Cvilux)公司的发展小趣事

随着公司规模的逐渐扩大,喜美克斯公司开始思考如何进一步拓展市场。他们深入研究市场趋势和消费者需求,制定了针对不同市场的精准营销策略。通过与当地合作伙伴的紧密合作,喜美克斯成功地将产品打入了多个新兴市场,实现了销售额的快速增长。

High Voltage Semiconductor Inc公司的发展小趣事

为了更好地服务全球客户,美高测积极寻求与国际知名企业的合作。通过与半导体制造巨头台积电、英特尔等公司的合作,美高测不仅获得了先进的制造技术和市场洞察能力,还成功将其高压测试产品打入了这些巨头的供应链体系。同时,公司还与多个国家的科研机构建立了长期合作关系,共同开展前沿技术的研发和应用,进一步提升了公司的国际影响力。

Analog公司的发展小趣事

进入21世纪,美高测持续加大在技术研发上的投入,成功研发出具有自主知识产权的VLF(超低频)测试技术,并应用于变电站设备、中高压电力电缆等关键领域的测试。这项技术不仅提高了测试的准确性和效率,还降低了操作风险,迅速获得了市场的广泛认可。公司借此机会,在全球范围内建立了多个销售和服务中心,进一步巩固了其在高压半导体测试市场的领先地位。

Bliley Technologies Inc公司的发展小趣事

二战期间,Bliley迎来了其历史上的一个重要时刻。由于战争对通信设备的巨大需求,Bliley的产品成为军事通信领域的关键组件。政府的大量采购合同使得Bliley的销售额直线上升,员工数量也急剧增加。为了满足战争期间的巨大需求,Bliley不得不扩建工厂,并实行昼夜不停的生产制度。这段时期,Bliley不仅在军事通信领域取得了显著成就,同时也为其在战后的发展奠定了坚实基础。

FERYSTER公司的发展小趣事

在技术创新的同时,FERYSTER公司也非常注重市场拓展。公司管理层通过深入的市场调研,发现亚洲市场对于高性能电子产品有着巨大的需求。于是,他们制定了针对亚洲市场的营销策略,包括加强品牌宣传、与当地企业建立合作关系等。这些措施取得了显著成效,FERYSTER公司的产品在亚洲市场的销量迅速增长,为公司带来了丰厚的利润。

Crystek公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,Crystek公司积极拓展国际市场,与全球多家知名企业建立了合作关系。通过与这些企业的深入合作,Crystek公司的产品得以广泛应用于无线、微波无线电、电信、工业、企业、航空航天和政府部门等各个领域。同时,公司还积极参加国际电子展览和技术交流会议,与全球同行交流学习,不断提升自身的技术水平和市场竞争力。

问答坊 | AI 解惑

电视监控系统组成

闭路监控系统主要组成部分是:前端部分(产生图像的摄像机或成像装置),传输部分(图像的传输),控制部分,显示记录部分。如图所示。 1、 前端部分 CCTV的前端设备是直接完成现场图像捕捉功能的设备及其辅助设备,主要有一体化智能快球、固定 ...…

查看全部问答>

基于STM32的μC/OS Ⅱ移植例程

例程大小:1583K 例程说明: 1.改移植和模板工程不包括操作系统核ucosⅡ的源代码,如需使用请向操作系统的供应商联系或者网上下载免费的源代码。 2.本移植使用的是 ucosⅡ 2.83版本,需要在OS文件夹下添加的操作系统源代码包括如下文件: os_fla ...…

查看全部问答>

单片机外围电路设计

在用单片机设计的过程中,难免要进行一些外围电路设计。这里我收集了一本不错的单片机外围电路设计的电子书,特的拿出来和大家一起分享!!!!!!!!!…

查看全部问答>

请教我读一读这个密码锁程序

在网上找了个密码锁程序来学习,用KEIL编译,开始不能生成HEX文件,后来找到原因了,有些是数字0打成了字母O,有些是漏了冒号! 现在想问一下,这个程序应该怎样读?密码是如何设置的?刚学,搞不懂. org 0000h AJMP START ORG 0030H START:ACALL BP ...…

查看全部问答>

S3C2440+ADS+H-JTAG+AXD无法调试

在AXD中Load Image后无法正常加载,加载后的程序如下                __main        [0x00000000]   andeq    r0,r0,r0        ...…

查看全部问答>

片内flash和片外flash?

刚接触开发板, 不清楚什么是片内RAM和片外RAM,以及片内Flash和片外Flash. 请大家解释一下, 我用的是philips的板子. 难道LPC2214处理器内部也有ARM和Flash吗? …

查看全部问答>

【编程】请教磁盘数据如何擦除

最近需要开发一个擦除硬盘的工具,实现的功能就是将一整块硬盘挂到一台机器上,比如说是Windows系统的机器上,然后利用该工具将整块硬盘的数据清除,而且清除后不可以再恢复。并且这块硬盘不管它是在什么系统下用的硬盘(比如AIX、HP、SCO等等), ...…

查看全部问答>

大侠,能给个Finsh shell移植到stm32的例子吗

或者给个移植的文档也行啊,radio里的东西感觉有点乱啊,谢谢了…

查看全部问答>

为什么UC3843驱动MOS管的波形,只有几个周期有波形,其它时间没有?

我现在用UC3843控制MOS管来做boost升压电路,测量UC3843的6脚输出波形发现,只有几个周期有波形,其它时间输出波形一直为低。24VDC升压到120VDC,0.25A,开关频率为220K。请问这是为什么? …

查看全部问答>

TFT怎样“随机”显示字库中的“汉字

我知道怎样得到随机数,但是不知道怎样将这个数和字库中的汉字对应起来并显示出来? 我的汉字显示函数为: LCD_PutString(200,210,\"确\",Red,Blue2);//显示“确”字 上面的语句中“确”字是用引号括起来的。例如“确”字在字库中排在第一个,而 ...…

查看全部问答>