您的位置 首页 基础

我的MIDI键盘程序

includeat89x52h>89s52头文件defineio_74hc165_SH_LDP1_0硬件设置defineio_74hc165_CLKP1_1define

#include //89s52头文件

#define io_74hc165_SH_LD   P1_0  //硬件设置#define io_74hc165_CLK     P1_1#define io_74hc165_SDA     P1_2#define io_74hc164_SCK  P1_3#define io_74hc164_SDA  P1_4#ifndef RW_DEFINED#define RW_DEFINEDvoid _snop_(){}#endif//Crystal at 12.0MHz 1MIPS#define I2C_SDA P3_2                          // 将p3.2口模仿数据口,必需要这样。中止承受数据#ifdef I2C_SCL#else#define I2C_SCL P1_6                          // 将p1.1口模仿时钟口,默许#endif#ifdef SlaveAddress#else#define SlaveAddress 0x02		  //地址#endif#ifdef MasterAddress#else#define MasterAddress 0x01		  //主机地址#endif#define delayNOP(); {_snop_();_snop_();_snop_();_snop_();};unsigned char s_control;unsigned char s_note;unsigned char s_svel;bit	nm;bit   SystemError;                // 从机过错标志位//--------------------------------------------------------------------------------------------------// 函数称号: iic_start()// 函数功用: 发动I2C总线子程序//--------------------------------------------------------------------------------------------------void iic_start(void){ 	EA=0;            //时钟坚持高,数据线从高到低一次跳变,I2C通讯开端I2C_SDA = 1;I2C_SCL = 1;delayNOP();      // 延时5usI2C_SDA = 0;delayNOP();I2C_SCL = 0;}//--------------------------------------------------------------------------------------------------// 函数称号: iic_stop()// 函数功用: 中止I2C总线数据传送子程序//--------------------------------------------------------------------------------------------------void iic_stop(void){I2C_SDA = 0;   	   //时钟坚持高,数据线从低到高一次跳变,I2C通讯中止I2C_SCL = 1;delayNOP();I2C_SDA = 1;delayNOP();I2C_SCL = 0;EA=1;}//--------------------------------------------------------------------------------------------------// 函数称号: slave_ACK// 函数功用: 从机发送应对位子程序//--------------------------------------------------------------------------------------------------void slave_ACK(void){I2C_SDA = 0;I2C_SCL = 1;delayNOP();I2C_SDA = 1;I2C_SCL = 0;}//--------------------------------------------------------------------------------------------------// 函数称号: slave_NOACK// 函数功用: 从机发送非应对位子程序,迫使数据传输进程完毕//--------------------------------------------------------------------------------------------------void slave_NOACK(void){I2C_SDA = 1;I2C_SCL = 1;delayNOP();I2C_SDA = 0;I2C_SCL = 0;}//--------------------------------------------------------------------------------------------------// 函数称号: check_ACK// 函数功用: 主机应对位查看子程序,迫使数据传输进程完毕//--------------------------------------------------------------------------------------------------void check_ACK(void){ I2C_SDA = 1;      // 将p1.0设置成输入,有必要先向端口写1I2C_SCL = 1;F0 = 0;if(I2C_SDA == 1)    // 若I2C_SDA=1标明非应对,置位非应对标志F0F0 = 1;I2C_SCL = 0;}//--------------------------------------------------------------------------------------------------// 函数称号: IICSendByte// 进口参数: ch// 函数功用: 发送一个字节//--------------------------------------------------------------------------------------------------void IICSendByte(unsigned char ch){unsigned char idata n=8;     // 向I2C_SDA上发送一位数据字节,共八位while(n--){if((ch&0x80) == 0x80)    // 若要发送的数据最高位为1则发送位1{I2C_SDA = 1;    // 传送位1I2C_SCL = 1;delayNOP();I2C_SDA = 0;I2C_SCL = 0;}else{I2C_SDA = 0;    // 不然传送位0I2C_SCL = 1;delayNOP();I2C_SCL = 0;}ch = ch<<1;    // 数据左移一位}}//--------------------------------------------------------------------------------------------------// 函数称号: IICreceiveByte// 回来接纳的数据// 函数功用: 接纳一字节子程序//--------------------------------------------------------------------------------------------------unsigned char IICreceiveByte(void){unsigned char idata n=8;    // 从I2C_SDA线上读取一上数据字节,共八位unsigned char tdata=0;while(n--){I2C_SDA = 1;I2C_SCL = 1;tdata = tdata<<1;    // 左移一位,或_crol_(temp,1)if(I2C_SDA == 1)tdata = tdata|0x01;    // 若接纳到的位为1,则数据的最终一方位1elsetdata = tdata&0xfe;    // 不然数据的最终一方位0I2C_SCL=0;}return(tdata);}bit IICwaitACK(){ //10us不属于超时unsigned char i=0;bit j=0;I2C_SDA=1;//输入状况while (i!=10){if (I2C_SCL==1) //先SCL=1 SDA=0后SCL=0 SDA=1{j=1;break;}i++;}return j;}				   

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/255469.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部