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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机常用芯片的头文件.docx

1、单片机常用芯片的头文件/STC 单片机内部ADC转换程序/可选择查询和中断方式/H文件#ifndef _ADC_H_#define _ADC_H_#define ADC_POWER 0x80 /ADC 电源控制位#define ADC_FLAG 0x10 /ADC 完成标志#define ADC_START 0x08 /ADC 启动控制位/ADC转换速度选择#define ADC_SPEEDLL 0x00 /420 clocks#define ADC_SPEEDL 0x20 /280 clocks#define ADC_SPEEDH 0x40 /140 clocks#define ADC_SP

2、EEDHH 0x60 /70 clocksunsigned int AD_Result_Temp;unsigned int GetADCResult (unsigned char chan); /ADC 转换处理,查询方式#endif/C文件#ifndef _ADC_C_#define _ADC_C_#include /#include /*-初始化 ADC 寄存器 中断方式-void InitADC() unsigned unsigned char chan=0; P1ASF = 0xff; /设置P1口全部为ADC通道 ADC_RES = 0; /清除高8位缓冲数据 ADC_RESL =

3、0; /清除低2位缓冲数据 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | chan; _nop_(); _nop_(); /打开ADC*/-/ADC 中断处理/-/*void adc_isr() interrupt 5 using 1 unsigned unsigned int AD_Result_Temp ADC_CONTR &= !ADC_FLAG; /清除 ADC 中断标志位 return (AD_Result_Temp|ADC_RES) 7) ch = 0; /却换到下一个通道 ADC_CONTR = ADC_POWER | ADC

4、_SPEEDLL | ADC_START | chan;*/unsigned int GetADCResult(unsigned char chan) AD_Result_Temp=0; ADC_RES=0; ADC_RESL=0; ADC_CONTR = ADC_POWER | ADC_SPEEDHH | chan | ADC_START; _nop_(); /Must wait before inquiry _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG);/等待完成 ADC_CONTR &= ADC_FLAG; /关闭AD

5、C转换 AD_Result_Temp=(AD_Result_Temp|ADC_RES)2)+ADC_RESL); return AD_Result_Temp;#endif/74HC595/发送完一个8位数据,就锁存一次/ 8个数码管,可以这样做/ for(i=0;i8;i+)/ / Send_HC595(./要发送的8为数据);/ Show_595();/ /*/* */*将显示数据送入74HC595内部移位寄存器 */* */*/void Send_HC595(INT16U LED_DATA) INT8U i; for(i=0;i8;i+) HC595_DS=LED_DATA&0x80; H

6、C595_SHCP=1; /上升沿发生移位 _nop_(); _nop_(); HC595_SHCP=0; LED_DATA=LED_DATA0;i-) /数码管段8位数据 Data=bit_8&0x80; /传送一位数据 CLK=0; CLK=1; bit_8=bit_81; #endif20位串口A/D转换器CS551320位串口A/D转换器CS5513 接口程序2010-03-22 14:56/cs5513接口的C51官方程序/cs5513返回长整型数据/CS=0时表示片选有效,当然可以直接接地,这样可以节省一个I/O口sbit ADCS=P20;sbit ADCLK=P21;sbit

7、ADDO=P22;unsigned long int ADConv(void) uchar i;unsigned long int Result=0; ADCLK=0;ADCS=0;_nop_();_nop_();_nop_();ADCLK=0; while(ADDO);ADCLK=1;_nop_(); for(i=0;i3;i+)ADCLK=0;_nop_();ADCLK=1; for (i=0;i20;i+) ADCLK=0; Result=Result1; if (ADDO) Result=Result+1; ADCLK=1; ADCS=1; return Result;/LCD SMC

8、12864-05#ifndef _CRYFUCNS_H_#define _CRYFUCNS_H_void Send(unsigned char type,unsigned char transdata);void Init_LCD(void);void Clear_GDRAM(void);void Disp_HZ(unsigned char addr,const unsigned char * pt,unsigned char num);void Draw_PM(const unsigned char *ptr);void Draw_TX(unsigned char Yaddr,unsigne

9、d char Xaddr,const unsigned char * dp) ;void Disp_SZ(unsigned char addr,unsigned char shuzi);#endif#include #include #include#include extern const INT8U shuzi_table;void Send(INT8U type,INT8U transdata);/*液晶控制IO的宏定义*/sbit RS_CS = P00;sbit RW_SDI = P01;sbit E_CLK = P02;/*函数名称:delay_Nus功 能:延时N个us的时间参

10、数:n-延时长度返回值 :无*/void delay_Nus(INT16U n) INT8U i; for(i = n;i 0;i-) _nop_(); /*函数名称:delay_1ms功 能:延时约1ms的时间参 数:无返回值 :无*/void delay_1ms(void) INT8U i; for(i = 150;i 0;i-) _nop_(); /*函数名称:delay_Nms功 能:延时N个ms的时间参 数:无返回值 :无*/ void delay_Nms(INT16U n) INT16U i = 0; for(i = n;i 0;i-) delay_1ms();/*函数名称:Ini

11、_Lcd功 能:初始化液晶模块参 数:无返回值 :无*/void Init_LCD(void) delay_Nms(100); /延时等待液晶完成复位 Send(0,0x30); /*功能设置:一次送8位数据,基本指令集*/ delay_Nus(72); Send(0,0x02); /*DDRAM地址归位*/ delay_Nus(72); Send(0,0x0c); /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/ delay_Nus(72); Send(0,0x01); /*清屏,将DDRAM的位址计数器调整为“00H”*/ delay_Nus(72); Send(0,0x06)

12、; /*功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1*/ delay_Nus(72); /*函数名称:Send功 能:MCU向液晶模块发送1一个字节的数据参 数:type-数据类型,0-控制命令,1-显示数据 transdata-发送的数据返回值 :无*/void Send(INT8U type,INT8U transdata) INT8U firstbyte = 0xf8; INT8U temp; INT8U i,j = 3; if(type) firstbyte |= 0x02; RS_CS=1; E_CLK=0; while(j 0) if(j = 3) temp =

13、 firstbyte; else if(j = 2) temp = transdata&0xf0; else temp = (transdata 0;i-) if(temp & 0x80) RW_SDI=1; else RW_SDI=0; E_CLK=1; temp = 1; E_CLK=0; /三个字节之间一定要有足够的延时,否则易出现时序问题 if(j = 3) delay_Nus(600); else delay_Nus(200); j-; RW_SDI=0; RS_CS=0; /*函数名称:Clear_GDRAM功 能:清除液晶GDRAM内部的随机数据参 数:无返回值 :无*/void

14、 Clear_GDRAM(void) INT8U i,j,k; Send(0,0x34); /打开扩展指令集 i = 0x80; for(j = 0;j 32;j+) Send(0,i+); Send(0,0x80); for(k = 0;k 16;k+) Send(1,0x00); i = 0x80; for(j = 0;j 32;j+) Send(0,i+); Send(0,0x88); for(k = 0;k 16;k+) Send(1,0x00); Send(0,0x30); /回到基本指令集 /*函数名称:Disp_HZ功 能:显示汉字程序参 数:addr-显示位置的首地址 pt-指

15、向显示数据的指针 num-显示数据的个数返回值 :无*/void Disp_HZ(INT8U addr,const INT8U * pt,INT8U num) INT8U i; Send(0,addr); for(i = 0;i (num*2);i+) Send(1,*(pt+); /*函数名称:Draw_PM功 能:在整个屏幕上画一个图片参 数:ptr-指向保存图片位置的指针返回值 :无*/void Draw_PM(const INT8U *ptr) INT8U i,j,k; Send(0,0x34); /打开扩展指令集 i = 0x80; for(j = 0;j 32;j+) Send(0

16、,i+); Send(0,0x80); for(k = 0;k 16;k+) Send(1,*ptr+); i = 0x80; for(j = 0;j 32;j+) Send(0,i+); Send(0,0x88); for(k = 0;k 16;k+) Send(1,*ptr+); Send(0,0x36); /打开绘图显示 Send(0,0x30); /回到基本指令集 /*函数名称:Draw_TX功 能:在液晶上描绘一个16*16的图形参 数:Yaddr-Y地址, Xaddr-X地址 dp-指向保存图形数据的指针返回值 :无*/void Draw_TX(INT8U Yaddr,INT8U

17、Xaddr,const INT8U * dp) INT8U j; INT8U k = 0; Send(0,0x34); /使用扩展指令集,关闭绘图显示 for(j = 0;j 16;j+) Send(0,Yaddr+); /Y地址 Send(0,Xaddr); /X地址 Send(1,dpk+); /送两个字节的显示数据 Send(1,dpk+); Send(0,0x36); /打开绘图显示 Send(0,0x30); /回到基本指令集模式/*函数名称:Disp_SZ功 能:显示一个两位数字参 数:addr-显示地址 数字-显示的数字返回值 :无*/void Disp_SZ(INT8U add

18、r,INT8U shuzi) INT8U tmp0,tmp1; tmp0 = shuzi / 10; tmp1 = shuzi % 10; Send(0,addr); Send(1,shuzi_tabletmp0); Send(1,shuzi_tabletmp1); /STC 内部EEPROM 操作程序#ifndef _EEPROM_H_#define _EEPROM_H_/定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数/#define ENABLE_ISP 0x80 /系统工作时钟30MHz 时,对IAP_CONTR 寄存器设置此值/#define ENABLE_

19、ISP 0x81 /系统工作时钟24MHz 时,对IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x82 /系统工作时钟20MHz 时,对IAP_CONTR 寄存器设置此值#define ENABLE_ISP 0x83 /系统工作时钟12MHz 时,对IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x84 /系统工作时钟6MHz 时,对IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x85 /系统工作时钟3MHz 时,对IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x86 /系统工

20、作时钟2MHz 时,对IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x87 /系统工作时钟1MHz 时,对IAP_CONTR 寄存器设置此值#define FIRST 0x0000#define SECOND 0x200#define THIRD 0x400#define START_FLAG 0xE1union eeprom_addr unsigned int temp16; unsigned char temp82;addr16;void IAP_Disable (void); /关闭IAP 功能void Sector_Erase (unsigned int

21、add); /擦除扇区void Byte_Program (unsigned int add, unsigned char ch); /字节编程,调用前需打开IAP 功能extern unsigned char Byte_Read (unsigned int add); /读一字节,调用前需打开IAP 功能#endif#include /*读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节*/unsigned char Byte_Read(unsigned int add) EA = 0; IAP_DATA = 0x00; IAP_CONTR = ENAB

22、LE_ISP; /打开IAP 功能, 设置Flash 操作等待时间 IAP_CMD = 0x01; /IAP/ISP/EEPROM 字节读命令 addr16.temp16 = add; IAP_ADDRH = addr16.temp80; /设置目标单元地址的高8 位地址 IAP_ADDRL = addr16.temp81; /设置目标单元地址的低8 位地址 IAP_TRIG = 0x5A; /先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xA5; /送完A5h 后,ISP/IAP 命令立即被触发起动 _nop_(); IAP_Disable(); /关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, /一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 EA = 1; return (IAP_DATA);/*

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

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