




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、引用外部头文件:#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函数功能描述:键盘扫描函数,得到键的行列位置;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)有且只有一位 键值才有效 否则返回无效键值*/ 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 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=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码;说明:unsigned 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); 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(void) 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 RomAddress,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_ns(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(uchar 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|(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);函数功能描述:读取多字节数据;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);六、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; /开启控制电路,使能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_out|=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;/模拟时钟信号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 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_SendData(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);/定点播放函数功能描述: 发送数据;uchar 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_SendData(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(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(0x00); 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); 函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地理专业面试技巧与题目
- 2025年住院医师规培-重庆-重庆住院医师规培(医学检验科)历年参考题库含答案解析(5套)
- 2025年住院医师规培-辽宁-辽宁住院医师规培(核医学科)历年参考题库含答案解析
- 2025年住院医师规培-贵州-贵州住院医师规培(神经外科)历年参考题库含答案解析
- 2025年住院医师规培-福建-福建住院医师规培(神经内科)历年参考题库含答案解析(5套)
- 2025年住院医师规培-甘肃-甘肃住院医师规培(口腔颌面外科)历年参考题库典型考点含答案解析
- 疫情防控中的媒体责任与担当面试题
- 2025年住院医师规培-海南-海南住院医师规培(口腔修复科)历年参考题库含答案解析
- 2025年住院医师规培-河南-河南住院医师规培(神经外科)历年参考题库含答案解析(5套)
- 气罐基础知识培训课件
- 价值观使命培训
- 公路工程施工安全技术资料编制指南
- 十期牛黄清心丸
- 2024-2025学年四川成都田家炳中学高一新生入学分班质量检测数学试题【含答案】
- 外科学-心脏疾病课件
- 教育家精神引领下职业院校师德师风建设研究
- 2024年“泰山杯”山东省网络安全职业技能竞赛理论试题库(含答案)
- 工地受伤赔偿协议书
- NB-T10859-2021水电工程金属结构设备状态在线监测系统技术条件
- 呼吸系统疾病所致精神障碍
- 磁悬浮型与普通型离心冷水机组的性能及能耗比较
评论
0/150
提交评论