ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:484.77KB ,
资源ID:23274365      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23274365.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C51单片机模块驱动程序参考.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C51单片机模块驱动程序参考.docx

1、C51单片机模块驱动程序参考一、引用外部头文件:#include SST89x5x4.H 该头文件定义了SST89x5x4系列芯片所用到的关键变量,包括端口、各个寄存器等。#include 该头文件定义了C51单片机的几个关键操作。这两个头文件可在“KeilC51INC”文件夹中找到。二、按键模块: void Key_Init(void);unsigned char GetScanKey(void);unsigned char GetKey(void);函数功能描述:键盘初始化,将标志位置1;void Key_Init(void) bKeyUp_Flag=1;/标志(全局变量)位置1函数功能描

2、述:键盘扫描函数,得到键的行列位置;unsigned char GetScanKey(void) unsigned char key, i, temp; unsigned char xdata * ptr; key=0xff; for (i=1; i0x10; i=1) /i的低4位为行数位,行依次检测 循环4次 ptr=0x8fff; * ptr =i; temp = * ptr; /取键盘IO口的值 temp &= 0x0f; /屏蔽高四位 if (temp!=0x00) /是否有有效键值 key = i4; /见说明 /*行值有效位(键盘的4个行SEL返回的值含有的有效位1)有且只有一位

3、 键值才有效 否则返回无效键值*/ if (temp=0xff) key=0xff; return key; temp=Key_Value_Tablekey&0x0f; /*列值有效位(键盘的4个列RL返回的值含有的有效位1)有且只有一位 键值才有效 否则返回无效键值*/ if (temp=0xff) key=0xff; return key; key=Key_Value_Tablekey4*4+Key_Value_Tablekey&0x0f;/行对应的中间值的四倍与列对应的中间值之和即为按键编号015 /*行列组合后的值大于15无效*/ if (key15) key=0xff; return

4、 key; bKeyUp_Flag=0; return key; 三、LCD模块:详细资料请字符点阵说明书.pdf器件资料请参考“字符点阵说明书.pdf”中有关EDM1602部分;void LCD_Init(void);void LCD_Init2(void);void WriteW(uint a);void CheckBF(void);unsigned char Key_ASC2(unsigned char);void WritD(unsigned char);函数功能描述:检查忙标志位BF;void CheckBF(void) uint i; while(1) ptr=0xAFF1;/RS

5、=0,R/W=1 i=*ptr; i &= 0x80; if(i=0) break; 函数功能描述:向1602指令寄存器写指令;void WriteW(uint a) ptr=0xAFF0; /RS=0,R/W=0 *ptr=a;函数功能描述:LCD初始化;void LCD_Init(void) CheckBF(); WriteW(0x38); CheckBF(); WriteW(0x01); CheckBF(); WriteW(0x06); CheckBF(); WriteW(0x0F); CheckBF(); WriteW(0x80);函数功能描述:十六进制码转换为ascii码;说明:un

6、signed char code ASC2_Value_Table16= 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46 ; 定义在函数外部unsigned char Key_ASC2(unsigned char key) unsigned char key_asc2; key_asc2=ASC2_Value_Tablekey; return key_asc2;函数功能描述:换行后的初始化;void LCD_Init2(void) CheckBF(); WriteW(0x0F);

7、CheckBF(); WriteW(0xC0);函数功能描述:显示字符;void WritD(unsigned char key_asc2) CheckBF(); ptr=0xAF02; *ptr=key_asc2;四、LED模块: void Led_Init(unsigned char *show);void display(uchar n);函数功能描述:给显示数组赋初始值;void Led_Init(uchar *show) unsigned char i; for (i=0;i8;i+) /在此处给显示数组赋值 show+; 函数功能描述:在LED上显示;void display(vo

8、id) unsigned char i=1,j; unsigned char xdata *ptr; for (j=0; j8; j+)/八个数码管全部显示 ptr=0x8fff;/段选地址 *ptr=i; ptr=0x9fff;/位选地址 /在此给*ptr赋值送字形码 Delay_us(50); *ptr=0x00; i=1;/下一位 五、I2C模块:详细资料请参考I2C_bus.pdf文件void WriteI2C(uchar *Wdata,uchar RomAddress,uchar number);void ReadI2C(uchar *RamAddress,uchar RomAddr

9、ess,uchar bytes);void StartI2C(void);void StopI2C(void);bit Write8Bit(uchar);uchar Read8Bit(void);void Ack(void);bit ChackAck(void);void NoAck(void);函数功能描述:启动I2C总线;void StartI2C(void) SDA=1; Delay_ns(1); SCL=1; Delay_ns(1); SDA=0; Delay_ns(1); SCL=0; Delay_ns(1);函数功能描述:应答动作;void Ack() SDA=0; Delay_n

10、s(1); SCL=1; Delay_ns(1); SCL=0; Delay_ns(1); SDA=1; Delay_ns(1);函数功能描述:无应答动作;void NoAck(void) SDA=1; Delay_ns(1); SCL=1; Delay_ns(1); SCL=0; Delay_ns(1);函数功能描述:停止i2c总线;void StopI2C(void) SCL=0; Delay_ns(1); SDA=0; Delay_ns(1); SCL=1; Delay_ns(1); SDA=1; Delay_ns(1);函数功能描述:向器件发送8位数据;bit Write8Bit(uc

11、har input) uchar temp; for(temp=8;temp!=0;temp-) SDA=(bit)(input&0x80); Delay_ns(1); SCL=1; Delay_ns(1); SCL=0; Delay_ns(1); input=input1; return 1; Delay_ns(1);函数功能描述:读取8位数据;uchar Read8Bit(void) uchar temp,rbyte=0; for(temp=8;temp!=0;temp-) SCL=1; Delay_ns(1); rbyte=rbyte1; Delay_ns(1); rbyte=rbyte

12、|(uchar)(SDA); SCL=0; Delay_ns(1); return rbyte;函数功能描述:向器件发送多字节数据;void WriteI2C(uchar *Wdata,uchar RomAddress,uchar number) StartI2C(); Write8Bit(0xA2); ChackAck(); Write8Bit(RomAddress); ChackAck(); for(;number!=0;number-) Write8Bit(*Wdata); ChackAck(); Wdata+; StopI2C(); Delay_ns(1);函数功能描述:读取多字节数据

13、;void ReadI2C(uchar *RamAddress,uchar RomAddress,uchar bytes) StartI2C(); Write8Bit(0xA2); ChackAck(); Write8Bit(RomAddress); ChackAck(); StartI2C(); Write8Bit(0xA3); ChackAck(); for(;bytes!=1;bytes-) *RamAddress=Read8Bit(); Ack(); RamAddress+; *RamAddress=Read8Bit(); NoAck(); StopI2C(); Delay_ns(1)

14、;六、AD模块:详细资料请参考tlc1549.pdf文件void Before_Once_AD(void);/预采集uint adc_1549(void) ;/读取AD输出的10bit数据void sort(uint *VolArray1);/排序函数 void ad_FilterAverage(void);/平均值滤波void ad_FilterMedia(void);/中值滤波void ad_FilterSlide(void);/滑动滤波函数功能描述;预先采集;void Before_Once_AD(void) uchar i; ADCLK=ADOUT=0; ADCS=0; /开启控制电路

15、,使能DATA OUT和I/O CLOCK for(i=1;i=10;i+) ADCLK=1; _nop_(); ADCLK=0; _nop_(); ADCS=1; Delay_us(25);/两次转换间隔大于21us函数功能描述:转换并读取;uint adc_1549(void) uint data_out=0; uchar i; ADCLK=ADOUT=0; ADCS = 1; _nop_(); ADCS=0; /开启控制电路,使能DATA OUT和I/O CLOCK for(i=1;i=10;i+) /给一个脉冲 ADCLK=1; data_out=1; if(ADOUT) data_o

16、ut|=0x01; ADCLK=0; ADCS=1; Delay_us(21);/两次转换间隔大于21us return(data_out); 七、DA模块: 详细资料请参考tlc5615.pdf文件函数功能描述:驱动TLC5615开始DA转换;dat为被转换的数字量void tlc5615(uint dat) uchar x; CS=1; SCLK=0; delay(100); DIO=0; CS=0;/ 片选DA芯片 dat=dat6; /虽然说输入是16位数据,但只有10为有效,DAC寄存器是10位 for(x=0;x12;x+) /串行发送 DIO=dat&0x8000; SCLK=1

17、;/模拟时钟信号 dat=dat1; SCLK=0; CS=1;/ CS的上升沿和下降沿只有在clk为低的时候才有效 八、语音模块: 详细资料请参考isd1760.pdf文件 预定义#define low_duanma XBYTE0xB000#define read_duanma XBYTE0x9FFF /XBYTE0x00004=MISO#define PU 0x01 #define STOP 0x02 #define RESET 0x03 #define CLI_INT 0x04 #define RD_STATUS 0x05 #define RD_PLAY_PTR 0x06 #define

18、 PD 0x07 #define RD_REC_PTR 0x08 #define RD_DEVID 0x09 #define G_ERASE 0x43 #define RD_APC 0x44 #define WR_APC1 0x45 #define WR_APC2 0x65 #define WR_NVCFG 0x46 #define CHK_MEM 0x49 #define SET_PLAY 0x80 #define SET_REC 0x81 #define SET_ERASE 0x82extern uchar spi_buf;void I_delay(void); uchar ISD_Sen

19、dData(uchar BUF_ISD); /发数据void ISD_PU(void); /上电void ISD_Reset(void); /复位void RdStatus(void); /读状态void ISD_WR_APC2(uchar voiceValue); void ISD_WR_NVCFG(void); /永久写入寄存器void ISD_Init(void); /器件初始化void play_close(void); /停止播放void play_open(unsigned int duanma,unsigned int duanma1);/定点播放函数功能描述: 发送数据;uch

20、ar ISD_SendData(uchar BUF_ISD) uchar i,dat=BUF_ISD; spi_buf&=0xfe; low_duanma=spi_buf; spi_buf|=0x02; low_duanma=spi_buf; for(i=0;i=1; if(read_duanma&0x10) dat|=0x80; spi_buf|=0x02; low_duanma=spi_buf; I_delay(); spi_buf&=0xfb; low_duanma=spi_buf; return(dat); 函数功能描述: 上电;void ISD_PU(void) ISD_SendDa

21、ta(PU); ISD_SendData(0x00); spi_buf|=0x01;low_duanma=spi_buf;Delay_us(2); 函数功能描述: 复位;void ISD_Reset(void)ISD_SendData(RESET); ISD_SendData(0x00); spi_buf|=0x01;low_duanma=spi_buf;Delay_us(2); 函数功能描述: 读取状态;uchar SR0_L; uchar SR0_H; uchar SR1;void RdStatus(void) doISD_SendData(RD_STATUS); ISD_SendData

22、(0x00); ISD_SendData(0x00); spi_buf|=0x01;low_duanma=spi_buf;SR0_L =ISD_SendData(RD_STATUS); SR0_H =ISD_SendData(0x00); SR1 =ISD_SendData(0x00); spi_buf|=0x01;low_duanma=spi_buf;while(!(SR1&0x01); /if(SR0_L0=1)system Err 函数功能描述: 永久写入寄存器;void ISD_WR_NVCFG(void) ISD_SendData(WR_NVCFG); ISD_SendData(0x

23、00); spi_buf|=0x01;low_duanma=spi_buf;Delay_us(2); 函数功能描述: 设置APC2;void ISD_WR_APC2(uchar voiceValue) ISD_SendData(WR_APC2); ISD_SendData(voiceValue); /0xa8声音最大,0xaf声音最小 ISD_SendData(0x0c); /D11=1,在SETPLAY模式下,执行到EOM自动结束。或者在连续两个SET_PLAY命令后,执行到第一个EOM自动跳到第二段开始 spi_buf|=0x01;low_duanma=spi_buf;Delay_us(2

24、); 函数功能描述: 初始化;void ISD_Init(void) ISD_Reset(); Delay_us(2);RdStatus(); ISD_PU(); RdStatus(); ISD_WR_APC2(0xa8); RdStatus(); ISD_WR_NVCFG(); /永久写入寄存器 RdStatus(); 函数功能描述: 停止播放;void play_close(void) ISD_SendData(STOP); ISD_SendData(0x00); spi_buf|=0x01;low_duanma=spi_buf;Delay_ms(2); /因为停止动作比较慢,停止后多一个延时,保证语音芯片接收到下一条指令 函数功能描述: 定点播放;参数说明:AddST为段首地址,AddEN为段末地址void play_open(unsigned int AddST,unsigned int AddEN) AddST=AddST&0x3fff;AddEN=AddEN&0x3fff;if(AddST0)RdStatus(); ISD_SendData(SET_PLAY); ISD_SendData(0x00); ISD_SendData(uchar)(AddST&0x00

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1