Ⅰ FPC1021电容式指纹模块,那家的好用
仅供参考。
FPM10A光学指纹模块简要使用说明
1.引脚
FPM10A使用1.0MM FPC 上接插座引出了5个引脚,在板子上有标1的位置为第一引脚。五个引脚的作用依次为:
1 为 VCC 电源的正极接 3.6V– 5.5V的电压均可。
2 为 GND 电源的负极接地。
3 为 TXD 串口的发送。
4 为 RXD 串口的接收。
5 为 NC 悬空不需要使用。
2.串口
FPM10A使用标准的串口与外界通信,默认的波特率为57600,可以进行更改,请参考通信协议。可以与任何单片机,ARM,DSP等带串口的设备进行连接,请注意电平转换,连接电脑需要进行电平转换,比如MAX232电路。3.3V 5V的单片机可以直接连接。
3.关于模块的检测
模块成功上电后,指纹采集窗口会闪一下,表示自检正常,如果不闪,请仔细检查电源,是否接反,接错等。
4.指纹模块的温度
指纹模块使用120MHZ的DSP全速工作,工作时芯片有一些热,经过严格的测试,这是没有问题的可以放心使用,在不使用的时候可以关闭电源,以降低功耗。
volatile unsigned char UART1_FINGERPRINT_RECEVICE_BUFFER[24];
//FINGERPRINT通信协议定义
unsigned char FP_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF}; //协议包头
unsigned char FP_Get_Img[6] = {0x01,0x00,0x03,0x01,0x0,0x05}; //获得指纹图像
unsigned char FP_Templete_Num[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 }; //获得模版总数
unsigned char FP_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x03,0xA1,0x0,0xB2}; //搜索指纹搜索范围0 - 929
unsigned char FP_Search_0_9[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x0,0x13,0x0,0x21}; //搜索0-9号指纹
unsigned char FP_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0x01,0x0,0x08}; //将图像放入到BUFFER1
unsigned char FP_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0x02,0x0,0x09}; //将图像放入到BUFFER2
unsigned char FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x09}; //将BUFFER1跟BUFFER2合成特征模版
unsigned char FP_Delet_All_Model[6]={0x01,0x0,0x03,0x0d,0x00,0x11};//删除指纹模块里所有的模版
volatile unsigned char FP_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};//将BUFFER1中的特征码存放到指定的位置
volatile unsigned char FP_Delete_Model[10]={0x01,0x00,0x07,0x0C,0x0,0x0,0x0,0x1,0x0,0x0}; //删除指定的模版
//volatile unsigned char FINGER_NUM;
/*------------------ FINGERPRINT命令字 --------------------------*/
//FINGERPRINT_获得指纹图像命令
void FINGERPRINT_Cmd_Get_Img(void)
{
unsigned char i;
for(i=0;i<6;i++) //发送包头
UART1_Send_Byte(FP_Pack_Head[i]);
for(i=0;i<6;i++) //发送命令 0x1d
UART1_Send_Byte(FP_Get_Img[i]);
}
//讲图像转换成特征码存放在Buffer1中
void FINGERPRINT_Cmd_Img_To_Buffer1(void)
{
unsigned char i;
for(i=0;i<6;i++) //发送包头
{
UART1_Send_Byte(FP_Pack_Head[i]);
}
for(i=0;i<7;i++) //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
{
UART1_Send_Byte(FP_Img_To_Buffer1[i]);
}
}
//将图像转换成特征码存放在Buffer2中
void FINGERPRINT_Cmd_Img_To_Buffer2(void)
{
unsigned char i;
for(i=0;i<6;i++) //发送包头
{
UART1_Send_Byte(FP_Pack_Head[i]);
}
for(i=0;i<7;i++) //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
{
UART1_Send_Byte(FP_Img_To_Buffer2[i]);
}
}
//将BUFFER1 跟 BUFFER2 中的特征码合并成指纹模版
void FINGERPRINT_Cmd_Reg_Model(void)
{
unsigned char i;
for(i=0;i<6;i++) //包头
{
UART1_Send_Byte(FP_Pack_Head[i]);
}
for(i=0;i<6;i++) //命令合并指纹模版
{
UART1_Send_Byte(FP_Reg_Model[i]);
}
}
//删除指纹模块里的所有指纹模版
void FINGERPRINT_Cmd_Delete_All_Model(void)
{
unsigned char i;
for(i=0;i<6;i++) //包头
UART1_Send_Byte(FP_Pack_Head[i]);
for(i=0;i<6;i++) //命令合并指纹模版
UART1_Send_Byte(FP_Delet_All_Model[i]);
}
//删除指纹模块里的指定指纹模版
void FINGERPRINT_Cmd_Delete_Model(unsigned int uiID_temp)
{
volatile unsigned int uiSum_temp = 0;
unsigned char i;
FP_Delete_Model[4]=(uiID_temp&0xFF00)>>8;
FP_Delete_Model[5]=(uiID_temp&0x00FF);
for(i=0;i<8;i++)
uiSum_temp = uiSum_temp + FP_Delete_Model[i];
//UART0_Send_Byte(uiSum_temp);
FP_Delete_Model[8]=(uiSum_temp&0xFF00)>>8;
FP_Delete_Model[9]=uiSum_temp&0x00FF;
for(i=0;i<6;i++) //包头
UART1_Send_Byte(FP_Pack_Head[i]);
for(i=0;i<10;i++) //命令合并指纹模版
UART1_Send_Byte(FP_Delete_Model[i]);
}
//获得指纹模板数量
void FINGERPRINT_Cmd_Get_Templete_Num(void)
{ unsigned int i;
unsigned char temp[14];
for(i=0;i<6;i++) //包头
UART1_Send_Byte(FP_Pack_Head[i]);
//发送命令 0x1d
for(i=0;i<6;i++)
UART1_Send_Byte(FP_Templete_Num[i]);
}
//搜索全部用户999枚
void FINGERPRINT_Cmd_Search_Finger(void)
{
unsigned char i;
for(i=0;i<6;i++) //发送命令搜索指纹库
{
UART1_Send_Byte(FP_Pack_Head[i]);
}
for(i=0;i<11;i++)
{
UART1_Send_Byte(FP_Search[i]);
}
}
//搜索全部用户999枚
void FINGERPRINT_Cmd_Search_Finger_Admin(void)
{
unsigned char i;
for(i=0;i<6;i++) //发送命令搜索指纹库
{
UART1_Send_Byte(FP_Pack_Head[i]);
}
for(i=0;i<11;i++)
{
UART1_Send_Byte(FP_Search_0_9[i]);
}
}
void FINGERPRINT_Cmd_Save_Finger( unsigned char ucH_Char,unsigned char ucL_Char )
{
unsigned long temp = 0;
unsigned char i;
// SAVE_FINGER[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};//将BUFFER1中的特征码存放到指定的位置
FP_Save_Finger[5] = ucH_Char;
FP_Save_Finger[6] = ucL_Char;
for(i=0;i<7;i++) //计算校验和
temp = temp + FP_Save_Finger[i];
FP_Save_Finger[7]=(temp & 0x00FF00) >> 8; //存放校验数据
FP_Save_Finger[8]= temp & 0x0000FF;
for(i=0;i<6;i++)
UART1_Send_Byte(FP_Pack_Head[i]); //发送包头
for(i=0;i<9;i++)
UART1_Send_Byte(FP_Save_Finger[i]); //发送命令 将图像转换成 特征码 存放在 CHAR_buffer1
}
//接收反馈数据缓冲
void FINGERPRINT_Recevice_Data(unsigned char ucLength)
{
unsigned char i;
for (i=0;i<ucLength;i++)
UART1_FINGERPRINT_RECEVICE_BUFFER[i] = UART1_Receive_Byte();
}
Ⅱ P3403UCL是什么
集成电路IC芯片元器
Ⅲ 2017英国留学热门专业有哪些
会计与金融学
就业方向:银行与资产管理公司、会计师事务所、股票经纪人、金融分析员、组合基金和共同基金经理、理财规划人。
英国金融业相当发达,金融业的发展也带动了会计领域的飞速前进。英国是最早出现职业会计师、第一个建立现代意义上会计职业团体的国家,总部设在英国的特许公认会计师公会是目前世界上领先的专业会计师团体,因此去英国学习会计有得天独厚的优势,而且利于就业。此外,英国有世界上几乎所有主要的国际银行和金融机构总部或分支机构,开放的经济环境使英国商学院特别是金融学斐誉世界。
金融学课程内容包括:西方经济学、国际金融学、货币银行学、金融市场学、金融工程学、国际保险、信托与租赁、商业银行经管、金融统计分析、国际经济法等。
传媒学
就业方向:网站、电视台、电台、报刊杂志社、影视制作公司、文化交流组织。
英国传媒产业非常发达,拥有世界最大的新闻广播机构BBC、全世界著名的通讯社路透社以及世界发行量最大的报纸《泰晤士报》,英国的新闻产品跨越和占据了世界传媒版图上的大部分角落,在全球传媒产业中举足轻重,享有不可撼动的地位。
英国传媒专业主要分三个方向:一为大众传媒,主要学习传播、广告、新闻写作、报道及采访等;二为影视制作媒体,包括编辑、游戏设计、音效处理、广告设计及电影电视制作等;三是媒体及记者,主要包括杂志社、报社、影视和新闻机构等。
计算机专业
就业方向:IT技术管理、网络支持、公共服务事业、软件开发、无线通信、芯片公司。
英国的教育机构在开发计算机系统和新型应用软件方面一直处于领先地位,英国的计算机专家在集成电路、电讯、互联网、逻辑电路、人工智能和电子科学方面取得了很多创新成果。同时,英国大学计算机专业与国内外各大公司紧密合作,培养储备人才。
计算机科学覆盖的专业包括:计算机通信、网络安全、人工智能、多媒体技术、软件开发、信息系统等。如果学生还没有明确的选择,可以选择这个基础专业。
教育学
就业方向:普通高校、中小学校、特殊教育机构、外语培训机构、出版社、报社、新技术教育领域。
老牌教育强国英国以其完善的高等教育体系、享誉国际的教育水准,贵族式严谨学风和一流的教学设施备受海外学子的关注,其精英教育的理念已经在各国深入渗透。
英国大学的教育专业非常之多,无论是刚刚毕业的大学生,还是已经从教多年的教师,都可以根据自己的情况找到适合的英国大学的相关教育专业,即使是对于刚刚毕业,非教育专业背景,但希望攻读教育类硕士课程的学生,英国大学都有相关的衔接课程。
电气工程
就业方向:电力系统、电力设计研究院、电子类高新技术企业、高等院校、科研院所、环保、邮电与通讯部。
英国的电气工程可谓是欧洲一流、世界领先,重要的电子电气厂商都起源于英国。英国电气工程专业的教育理念极具前瞻性和创造性,学生可以充分掌握创造思维和尖端技术设计理念。
电气工程课程设置包括:电路理论、电磁场理论、模拟电子技术,数字电子技术、电力电子技术、自动控制理论、电机学等。英国各高校与企业界的紧密联合,学生能在学习过程中就接触最为重要的核心应用部分,学有所用。
艺术
就业方向:戏剧表演、艺术工作室、时装界、平面设计、音乐公司、广告公司。
英国的艺术氛围浓厚,许多美术馆或博物馆可免费参观,且每年都会举行很多的艺术节,如著名的爱丁堡艺术节。英国有许多著名的艺术类院校,英国的艺术类专业在世界也属一流,因此,艺术类考生去英国留学是非常好的选择。
英国艺术类大学有两类可供学生选择,一是纯的艺术类院校,比如:伦敦艺术大学、创意艺术大学等,这些院校开设的全部是艺术类专业;另一类是综合性大学的艺术学院,比如伯明翰城市大学的伯明翰艺术设计学院、爱丁堡大学。
英国有很多设计类课程可以考虑,如:平面设计、产品设计、服装设计、珠宝设计等。同时有商科和艺术课程结合的课程如:时尚推广、时尚管理等。
管理学
就业方向:高校学术研究、政府机构、服务性质企业、规划部门、中层管理部门、HR。
英国大学的管理学课程是将前沿管理学理念与企业管理实际应用相结合,通过管理学理论研究、企业成败案例分析、模拟商业实战演练、以及团队组织配合等多种方式,提高学生的决策洞察力、战略管理水平以及总揽全局的决策能力。英国的管理学不是单纯的管理,有很多方向与细分,其实是五花八门、丰富多彩的。
管理类学科大部分接受转专业申请,课程涵盖了国际会计、研究方法、比较文化与传播、企业经济学、国际市场销售。
国际商务
就业方向:跨国公司商务代表、国际商务师、外资企业高管、涉外经济贸易部门、政府机构、商务活动策划专员。
在全球化经济的环境下,国际商务课程培养国际商务人才所需的各项能力,包括管理学、组织能力、行销、财务和人力资源管理。国际商务管理硕士课程和MBA工商管理硕士课程比较类似,但更为偏重对于跨国公司的研究和专业知识。
课程内容包括:跨国管理、国际商务理论和战略、管理学、国际商务研究方法论、新兴市场行销、国际电子商务、国际行销学等。
翻译
就业方向:口译人员、笔译人员、外文网站编辑、外文报刊杂志社、电视台、留学咨询公司。
英国是英语的发源地,拥有最纯正的英语言环境,在英国学习,除了专业上能获得无与伦比的提升之外,同时由于置身于纯正英语环境中,随时随地都可以用英语交流,因此学生可以及时将知识内化,自身素质获得飞速提升。
土木工程
就业方向:土木工程师、政府机构。
去英国学习土木工程专业有两大优势:一,英国开设土木工程学科的院校都经过协调小组及联合评估小组核准,确保了教学质量;二是土木工程专业常与其它相关学科如环境工程、建筑工程等结合,学生有机会兼修其他专业并获得到国内外实地考察及交流的机会。
土木工程是研究如何应用科学原理和数学规划、施工和维护各种建筑和设施的学科,研究方向主要为:结构工程、交通工程、环境工程、水利工程、建设工程等,课程设置主要为:工程力学、岩土力学、地基与基础、工程地质学、工程水文学、工程制图、建筑材料、混凝土结构、工程机构等。
Ⅳ 简述KGCfA型可控硅整流装置直流放大电路工作原理
直流放大电路由差动放大器、电压放大器及射极输出器三部分构成。差动放大器采用双端输入,单端输出。当输入信号增加时,则放大电路中各晶体管的基极电位Ub,集电极电位U。及发射极电位Ue将发生如下变化:Ub4↑→Uc4↑→Ub2↑→Uc2↑→Ubl↑→Ucl个,即输入信号增加时,输出信号也增加。反之输入信号减小时,输出信号也减小。
Ⅳ 软开关电源原理与应用的目录
第1章绪论
1.1开关电源的特点及其分类
1.2软开关电源的特点及其种类
1.3开关电源不可忽略的几个技术参数及其测试方法
1.3.1动态响J立
1.3.2输出纹波和噪声
1.3.3开关电源的无线电干扰特性及测试
1.3.4可靠性方面的几个参数
1.4本书的结构
第2章软开关电源功率开关器件
2.1功率晶体管(GTR)
2.1.1功率晶体管的结构
2.1.2特性与参数
2.1.3GTR的驱动与保护
2.2功率场效应晶体管(POwer MOSFET)
2.2.1结构与工作原理
2.2.2特性与参数
2.2.3栅极的驱动与保护
2.3绝缘栅双极晶体管(IGBT)
2.3.1原理与特性
2.3.2门极驱动
2.3.3 IGRT的保护
第3章软开关电源基础电路
3.1基本变换器电路结构与拓扑
3.1.1 Buck变换器
3.1.2 Bocst变换器
3.1.3 Buck慨t变换器
3.1.4 Cuk、Sepic、Zeta变换器
3.1.5单端反激式变换器
3.1.6单端正激式变换器
3.1.7半桥式变换器
3.1.8全桥式变换器
3.2谐振电路的基本概念
3.2.1串联谐振电路
3.2.2并联谐振电路
3.2.3谐振开关
3.3钳位吸收电路
3.3.1最简单的软启动——串联电感
3.3.2最简单的软关断——并联电容
3.3.3 RLD开关开通吸收电路
3.3.4 RCD开关关断吸收电路
3.3.5无损LCD吸收电路
3.4特种整流电路
3.4.1倍压整流电路
3.4.2倍流整流电路
3.4.3同步整流(SR)电路
3.5功率因数校正电路
3.5.1无源功率因数校正电路
3.5.2有源功率因数校正电路
3.5.3单级PFC(功率因数校正)电路
3.5.4软开关功率因数校正(PFC)电路
第4章谐振变换器
4.1全谐振变换器
4.1.1串联负载串联谐振变换器
4.1.2并联负载串联谐振变换器
4.2准谐振开关变换器
4.2.1零电流开关准谐振变换器
4.2.2零电压开关准谐振变换器
4.3多谐振开关变换器
4.3.1零电压开关多谐振变换器
4.3.2半桥式多谐振变换器
4.3.3零电压开关多谐振变换器族
4.4软开关谐振变换器的应用
4.4.1电压谐振变换器应用实例
4.4.2电流谐振变换器应用实例
4.4.3多谐振变换器应用实例
第5章有源钳位软开关变换器
5.1有源钳位正激变换器
5.1.1工作原理
5.1.2电路设计
5.2有源钳位反激变换器
5.3有源钳位反激一正激变换器
5.3.1工作原理
5.3.2电路设计
5.4有源钳位变换器的应用
第6章软开关PWM变换器
6.1 PWM技术
6.1.1工作原理
6.1.2 SPWM波形成电路
6.1.3 PWM反馈控制模式
6.2 ZCS PWM变换器
6.2.1工作原理
6.2.2 ZCS PWM变换器与ZCS QRCs的比较
6.2.3参数设计
6.2.4 ZCS PWM变换器族
6.3 ZVS PWM变换器
6.3.1工作原理
6.3.2 ZVS PWM变换器与ZVS QRCs的比较
6.3.3参数设计
6.3.4 ZVS PWM变换器族
6.4 ZCT PWM变换器
6.4.1工作原理
6.4.2参数设计
6.5改进型ZCT PWM变换器
6.5.1工作原理
6.5.2参数选值
6.6 ZVT—PWM变换器
6.6.1工作原理
6.6.2辅助电路的参数设计
6.7改进型ZVT PwM变换器
6.7.1工作原理
6.7.2辅助电路的参数设计
6.7.3改进型zVT PWM变换器族
6.8 ZVS-ZCS全软开关变换器
6.8.1 ZVSZS-Buck—PWM变换器
6.8.2单管ZVS-zCSBuck—PWM变换器
6.8.3带反馈的Buck-PWM变换器
6.9三电平软开关直流变换器
6.9.1三电平软开关直流变换器
6.9.2改进型ZVS三电平直流变换器
6.9.3采用变压器次级辅助绕组的软开关PWM三电平变换器
第7章移相控制软开关PWM DC/DC全桥变换器
7.1相位调制PWM拓扑技术
7.1.1工作原理
7.1.2控制电路
7.1.3栅极驱动信号延迟
7.2移相控制ZVS PWM DC/DC全桥变换器
7.2.1工作原理
7.2.2实现ZVS的条件
7.2.3次级侧占空比丢失
7.3移相控制ZCS PWM DC/DC全桥变换器
7.3.1工作原理
7.3.2实现ZCS的条件及策略
7.3.3电流占空比丢失
7.4移相控制ZVS/ZCS PwM DC/DC全桥变换器
7.4.1工作原理
7.4.2参数设计
7.5实际应用
7.5.1 1.5 kW ZVT全桥变换器
7.5.2 2 kW ZVS全桥PWM变换器
第8章软开关电源集成控制器
8.1 PFM谐振型集成控制器MC34066系列
8.1.1工作原理
8.1.2应用举例
8.2 UC386X(61~68)准谐振软开关控制器
8.2.1特点和引脚说明
8.2.2额定参数
8.2.3主要电气参数
8.2.4工作原理
8.2.5典型应用
8.3移相谐振全桥软开关控制器ucl875/U(2875/UC3875系列
8.3.1性能特点
8.3.2技术参数
8.3.3引出端功能介绍
8.3.4工作原理
8.3.5典型应用
8.4移相谐振全桥软开关控制器UC1879UC2879/UC3879系列
8.4.1特点和引脚说明
8.4.2额定参数
8.4.3主要电气参数
8.4.4工作原理
8.4.5 UC23879与UC33875的比较
8.5 UC3855A/UC3855B软开关功率因数预调节器
8.5.1特点和引脚说明
8.5.2额定参数
8.5.3主要电气参数
8.5.4工作原理
8.5.5典型应用
附录A软开关电源常用词汇
参考文献
Ⅵ 您好,我也在用DS18B20设计体温采集电路,但不会编程,你能不能把你写的给我发一下,谢谢
ds18b20.h
#ifndef _DS18B20_H_
#define _DS18B20_H_
#include <reg52.h>
sbit Ds18b20_DQ =P2^3;
void GetTemperature(unsigned char *pszTemperature, unsigned char SizeOfTemperature);
#endif
ds18b20.c
#include <reg52.h>
#include <intrins.h>
#include "ds18b20.h"
#include "../Delay Lib/Delay.h"
#include "../MyString Lib/mystring.h"
static bit Ds18b20_Reset()
{
bit bRet;
Ds18b20_DQ=0;
DelayXUs(218); //480us, pull down bus for reset
Ds18b20_DQ=1;
DelayXUs(25); //60us, wait for 15-60us for ds18b20 to pull down the bus
bRet=~Ds18b20_DQ;
if(bRet) //if there is a ds18b20 on the bus, wait extra 240us for ds18b20 release the bus. otherwise, just return false
{
DelayXUs(108); //240us, wait for ds18b20 release the bus
}
return bRet;
}
static void WriteByte(unsigned char ucByte)
{
unsigned char i=8;
bit bThis;
do
{
Ds18b20_DQ=1; //be sure the bus is high before sending
_nop_();
_nop_();
Ds18b20_DQ=0;
bThis = ucByte & 0x01;
if(bThis) //send 1
{
_nop_(); //within 15us to release the bus
Ds18b20_DQ=1;
DelayXUs(25); //minimum 60us for a write slot
}
else //send 0
{
DelayXUs(43); //100 us to release the bus (60-120us)
Ds18b20_DQ=1;
}
ucByte>>=1;
} while(--i);
}
static unsigned char ReadByte()
{
unsigned char ucTmp=0x00, i=8;
do
{
Ds18b20_DQ=1; //be sure the bus is high before reading
_nop_(); _nop_();
ucTmp>>=1;
Ds18b20_DQ=0;
_nop_(); _nop_(); //at least 1us to hold down the bus
Ds18b20_DQ=1;
_nop_(); _nop_(); //ds18b20 holds the state for 15us, we must read within 15us
if(Ds18b20_DQ)
ucTmp |= 0x80;
DelayXUs(25); //60us for a minimum read slot
} while(--i);
return ucTmp;
}
void GetTemperature(unsigned char *pszTemperature, unsigned char SizeOfTemperature)
{
unsigned char ucMsb, ucLsb, szTmp[4];
char cTemperature;
static bit bFirstValid=0;
if(SizeOfTemperature<4)
{
pszTemperature[0]=0;
return;
}
if(!Ds18b20_Reset())
{
StringCopy(pszTemperature, "E01");
return;
}
WriteByte(0xCC);
WriteByte(0x44);
if(!Ds18b20_Reset())
{
StringCopy(pszTemperature, "E02");
return;
}
WriteByte(0xCC);
WriteByte(0xBE);
ucLsb=ReadByte();
ucMsb=ReadByte();
ucLsb>>=4;
ucMsb<<=4;
cTemperature=ucMsb|ucLsb;
if(!bFirstValid)
{
if(85==cTemperature)
{
StringCopy(pszTemperature, "N/A");
return;
}
else
{
bFirstValid=1;
}
}
if(cTemperature>=100 || cTemperature<=-100)
{
StringCopy(pszTemperature, "E03");
return;
}
if(cTemperature & 0x80)
{
pszTemperature[0]='-';
cTemperature=~cTemperature;
}
else
{
pszTemperature[0]=' ';
}
UcToString(cTemperature, szTmp, sizeof(szTmp));
//pad string
if(!szTmp[1])
{
szTmp[1]=szTmp[0];
szTmp[0]='0';
szTmp[2]=0;
}
pszTemperature[1]=szTmp[0];
pszTemperature[2]=szTmp[1];
pszTemperature[3]=szTmp[2];
}
delay.h
#ifndef _DELAYMS_H_
#define _DELAYMS_H_
/*
Not very accurate, but 1 second ealier per minute
*/
void DelayMs(unsigned int ms);
/*
count: the count to be calculated
t: the delay period in us
6: includes MOV, LJMP(LCALL), RET comsumption, each instruction cost 2 machine cycles
base formula:
t
2count + 6 = --------------
12
-------
11.0592
so, final formula is:
count=11.0592t/24-3
And the maximum period is: 562us
*/
void DelayXUs(unsigned char count);
#endif
delay.c
#include "Delay.h"
void DelayMs(unsigned int ms)
{
unsigned int x,y;
for(x=ms; x>0; x--)
for(y=110; y>0; y--);
}
void DelayXUs(unsigned char count)
{
while(--count);
}
mystring.h
#ifndef _MYSTRING_H_
#define _MYSTRING_H_
void UcToString(unsigned char ucInput, unsigned char *pszTarget, unsigned char ucSizeOfTarget);
void StringCat(unsigned char *pszTarget, unsigned char ucSizeOfTarget, unsigned char *pszSource);
void StringCopy(unsigned char *pszTarget, unsigned char *pszSource);
#endif
mystring.c
#include "mystring.h"
void UcToString(unsigned char ucInput, unsigned char *pszTarget, unsigned char ucSizeOfTarget)
{
unsigned char ucIdx=0;
unsigned char ucTmp, ucInputSub;
bit bNoneZeroPrior=0;
if(ucSizeOfTarget<4)
{
pszTarget[0]=0;
return;
}
ucInputSub=ucInput;
ucTmp=ucInputSub/100;
if(!bNoneZeroPrior)
{
if(ucTmp)
{
pszTarget[ucIdx++]=ucTmp+0x30;
bNoneZeroPrior=1;
}
}
else
{
pszTarget[ucIdx++]=ucTmp+0x30;
}
ucInputSub%=100;
ucTmp=ucInputSub/10;
if(!bNoneZeroPrior)
{
if(ucTmp)
{
pszTarget[ucIdx++]=ucTmp+0x30;
bNoneZeroPrior=1;
}
}
else
{
pszTarget[ucIdx++]=ucTmp+0x30;
}
ucInputSub%=10;
pszTarget[ucIdx++]=ucInputSub+0x30;
pszTarget[ucIdx]=0;
}
void StringCat(unsigned char *pszTarget, unsigned char ucSizeOfTarget, unsigned char *pszSource)
{
unsigned char ucIdxSrc, ucIdxTgt;
for(ucIdxTgt=0; pszTarget[ucIdxTgt]; ucIdxTgt++);
for(ucIdxSrc=0; pszSource[ucIdxSrc]; ucIdxSrc++, ucIdxTgt++)
{
if(ucIdxTgt>=ucSizeOfTarget-1)
break;
pszTarget[ucIdxTgt]=pszSource[ucIdxSrc];
}
pszTarget[ucIdxTgt]=0;
}
void StringCopy(unsigned char *pszTarget, unsigned char *pszSource)
{
unsigned char ucIdx;
for(ucIdx=0; pszSource[ucIdx]; ucIdx++)
{
pszTarget[ucIdx]=pszSource[ucIdx];
}
pszTarget[ucIdx]=0;
}
Ⅶ 英国的电子工程专业或者电子电气专业ee考试如何进行,考核内容是什么`
你讲的几种考试形式都会涉及到,关键是看哪门课,以及该门课对学生的要求。
总体来讲,在这里的考试在第二个学期后实验课的比例越来越大,最后的考试形式可能是你或者你的小组一起做一个projekt.
这里有个大学的链接,你可以了解到更多。
http://www.ee.ucl.ac.uk/news/experienceit