历史上的今天
今天是: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; }
上一篇:MSP4301602显示Ⅱ
下一篇:MSP430 12864显示
史海拾趣
|
例程大小:1583K 例程说明: 1.改移植和模板工程不包括操作系统核ucosⅡ的源代码,如需使用请向操作系统的供应商联系或者网上下载免费的源代码。 2.本移植使用的是 ucosⅡ 2.83版本,需要在OS文件夹下添加的操作系统源代码包括如下文件: os_fla ...… 查看全部问答> |
|
在网上找了个密码锁程序来学习,用KEIL编译,开始不能生成HEX文件,后来找到原因了,有些是数字0打成了字母O,有些是漏了冒号! 现在想问一下,这个程序应该怎样读?密码是如何设置的?刚学,搞不懂. org 0000h AJMP START ORG 0030H START:ACALL BP ...… 查看全部问答> |
|
在AXD中Load Image后无法正常加载,加载后的程序如下 __main [0x00000000] andeq r0,r0,r0 ...… 查看全部问答> |
|
刚接触开发板, 不清楚什么是片内RAM和片外RAM,以及片内Flash和片外Flash. 请大家解释一下, 我用的是philips的板子. 难道LPC2214处理器内部也有ARM和Flash吗? … 查看全部问答> |
|
最近需要开发一个擦除硬盘的工具,实现的功能就是将一整块硬盘挂到一台机器上,比如说是Windows系统的机器上,然后利用该工具将整块硬盘的数据清除,而且清除后不可以再恢复。并且这块硬盘不管它是在什么系统下用的硬盘(比如AIX、HP、SCO等等), ...… 查看全部问答> |
|
为什么UC3843驱动MOS管的波形,只有几个周期有波形,其它时间没有? 我现在用UC3843控制MOS管来做boost升压电路,测量UC3843的6脚输出波形发现,只有几个周期有波形,其它时间输出波形一直为低。24VDC升压到120VDC,0.25A,开关频率为220K。请问这是为什么? … 查看全部问答> |
|
我知道怎样得到随机数,但是不知道怎样将这个数和字库中的汉字对应起来并显示出来? 我的汉字显示函数为: LCD_PutString(200,210,\"确\",Red,Blue2);//显示“确”字 上面的语句中“确”字是用引号括起来的。例如“确”字在字库中排在第一个,而 ...… 查看全部问答> |




