16位单片机大作业
16位单片机实验程序讲解

16位单片机实验程序讲解1、用C实现发光二极管单向循环点亮//=============================================================== //// The information contained herein is the exclusive property of// Sunplus Technology Co. And shall not be distributed, reproduced,// or disclosed in whole in part without prior written permission.//// (C) COPYRIGHT 2001 SUNPLUS TECHNOLOGY CO.// ALL RIGHTS RESERVED//// The entire notice above must be reproduced on all authorized copies.////==============================================================// 工程名称:led1_C.scs// 功能描述: 用C实现发光二极管单向循环点亮// 文件来源:《61板实验教程》"实验一发光二极管单向循环点亮“// 硬件连接:IOA低8位接至SEG接口控制LED的导通// IOB6连至DIG7通过ULN2003A控制8个LED的共阴极电平状态。
// IDE环境:SUNPLUS u'nSPTM IDE 1.8.0//// 涉及的库:// 组成文件:// main.c//// 日期: 2004/8/16//===============================================================#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Buffer (volatile unsigned int *)0x7001#define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_IOB_Data (volatile unsigned int *)0x7005#define P_IOB_Buffer (volatile unsigned int *)0x7006#define P_IOB_Dir (volatile unsigned int *)0x7007#define P_IOB_Attrib (volatile unsigned int *)0x7008#define P_Watchdog_Clear (volatile unsigned int *)0x7012//=============================================================// 函数名称: Delay()// 日期:20040816// 功能描述: 实现延时// 语法格式: void Delay(void);//入口参数: 无// 出口参数: 无// 注意事项: 仅为用户模型//=============================================================void Delay(){ //延时子程序unsigned int i;for(i=0; i<32768; i++){*P_Watchdog_Clear=0x0001; //清WatchDog}}//=============================================================// 函数名称: int main()// 日期:20040816// 功能描述: 发光二极管单向循环点亮// 语法格式: void main(void);// 入口参数: 无// 出口参数: 无// 注意事项: 仅为用户模型//=============================================================int main(){int LedControl = 0x0001;*P_IOA_Dir = 0x00ff; //设置A口低8位为同向低输出*P_IOA_Attrib = 0x00ff;*P_IOA_Data = 0x0000;*P_IOB_Dir=0x0040; //设置B6口为高电平输出,保证LED共阴极接地*P_IOB_Attrib=0x0040;*P_IOB_Data=0x0040;while(1){*P_IOA_Data = LedControl; //送数据到A口LedControl = LedControl << 1;if(LedControl > 0x00FF)LedControl = 0x0001;Delay();}}//=============================================================// main.c 结束//=============================================================2、用C实现发光二极管双向循环点亮//=============================================================== //// The information contained herein is the exclusive property of// Sunplus Technology Co. And shall not be distributed, reproduced,// or disclosed in whole in part without prior written permission.//// (C) COPYRIGHT 2001 SUNPLUS TECHNOLOGY CO.// ALL RIGHTS RESERVED//// The entire notice above must be reproduced on all authorized copies.////==============================================================// 工程名称:led2_C.scs// 功能描述: 用C实现发光二极管双向循环点亮// 文件来源:《61板实验教程》"实验二发光二极管双向循环点亮“// 硬件连接:IOA低8位接至SEG接口控制LED的导通// IOB6连至DIG7通过ULN2003A控制8个LED的共阴极电平状态。
洗衣机控制器 16位单片机大作业报告1

学院大作业报告课程名称:嵌入式系统设计与实践项目名称:《洗衣机控制器》班级:姓名:学号:成绩:________ 实验时间:2011.12.16一、设计目的运用C 语言,HCS12 16位单片机的知识,根据题目的要求进行软硬件的设计和调试,从而加深对于本课程知识点的理解,掌握了如何使用CodeWarrior 来整合各种驱动模块,再通过算法实现硬件上的运行。
二、功能描述最终运行的功能为:1、DG128开启,上电,LCD 提示显示输入。
2、键入所选定时量程,LCD 开始计时,此时,洗衣机启动。
3、定时结束,LCD 提示计数完毕,洗衣机工作完毕。
此时,手动关闭电源即可。
通过对于CodeWarrior 软件的操作,编写代码,最终实现freescaleHCS12DG128单片机简单控制家用洗衣机的开启——计数——关闭功能。
三、硬件连接图7-1 MCU 与LCD 的连接PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7PTA 口(KEY1-8)Vcc四、设计方案定时档位:在洗衣机启动的时候,LCD上电,显示提示输入,键入不同的键,所对应的模式不同,共分为20分钟、25分钟、、、65分钟10个定时档。
每个键所定义的模式为:键定义值0键位20分钟,键定义值每加1,相应计数值在20的基础上加5分钟。
主要驱动模块键盘驱动源文件:KBI_I.c.计数驱动模块:Timer.cLCD显示驱动模块:LCD.c五、程序设计代码//头文件包含#include "Includes.h" //总头文件#include <string.h>//在此添加全局变量定义uint8 time[3];extern uint8 KB_valueN,KB_DefValue;void main(){//0.1 主函数中的变量定义uint16 remember,cnt;uint8 state=0;uint32 mRuncount=0; //运行计数器uint8 receive_data[33]="Time: ";//uint8 d;////0.2 关总中断DisableInterrupt(); //禁止总中断//0.3 芯片初始化MCUInit();//0.4 模块初始化TimerInit(); //定时器1初始化LCDInit(); //LCD初始化KBInit(); //键盘初始化Light_Init(Light_Run_PORT,Light_Run,Light_OFF); //RUN指示灯初始化为暗//0.5 开放中断//EnableTimer; //开放定时器1溢出中断EnableKBint(); //开放键盘中断EnableInterrupt(); //开放总中断time[0] = 0; //(1) "时分秒"缓存初始化(00:00:00)time[1] = 0;time[2] = 0;remember = time[2]; //(2) 临时变量remember初始化KB_valueN = 0xff;LCDShow((uint8 *)"Input: "); //LCD提示输入// 主循环for(;;){//LCD显示计数器值if (KB_valueN != 0xff){if((KB_valueN==0xee)||(KB_valueN==0xde)||(KB_valueN==0xbe)||(KB_valueN==0x7e)||(KB_valueN==0xed)||(KB_valueN==0xdd)||(KB_valueN==0xbd)||(KB_valueN==0x7d)||(KB_valueN==0xeb)||(KB_valueN==0xdb)){if(state==0){cnt = (((KBDef(KB_valueN)-0x30)+20)*60);state=1;}if(state==1){if(remember!=time[2]);{for(;;){strcpy((char*)receive_data,"Time: ");//双引号中存在除“Time:”五个字符外的27个字符remember = time[2];cnt--;if(cnt>0){receive_data[8] =(cnt/1000)+0x30;receive_data[9] =((cnt%1000)/100)+0x30;receive_data[10]=((((cnt%1000)%100)/10)+0x30);receive_data[11]=((((cnt%1000)%100)%10)+0x30);LCDShow((uint8 *)receive_data);}elseLCDShow((uint8 *)"Task is Finished ");}}}}if((KB_valueN==0xbb)||(KB_valueN==0x7b)||(KB_valueN==0xe7)||(KB_valueN==0xd7)||(KB_valueN==0xb7)||(KB_valueN==0x77 )) LCDShow((uint8 *)"Time: ");}} //for_end(主循环结束)}//main_end中断程序isr.c中要添加中断程序,如定时器溢出中断处理程序,键盘中断程序。
单片机大作业试题及答案

单片机试题带答案版1、填空(每空2 分,共40 分)1、MCS-8051系列单片机字长是8 位,有40 根引脚,96系列字长是16 位。
单片机的特2、单片机的存储器的最大特点是指令存储器与数据存储器分开编址,Px并行口的地址是与数据存储器统一编址的,或者说属于该存储器。
3、8051最多可以有4 个并行输入输出口,最少也可以有1个并行口,即P1 。
P3常需复用作串行通信、外部中断、外部计数脉冲和读写控制信号。
4、ALE信号的作用是低8位地址锁存。
5、8051复位后,PC= 0 H。
若希望从片内存储器开始执行,EA脚应接高电平,PC值超过0FFF H时,8051会自动转向片外存储器继续取指令执行。
6、8051的C/T是加(加或减)计数的。
7、8051的中断向量表在3 H、0B H和13H、1BH、23H。
8、MOV A,40H 指令对于源超作数的寻址方式是直接寻址。
9、指令JB 0A7H,ABC的作用是若P2口的第7位为1则跳转到ABC 。
(0A7H是P2.7的地址)2、已知A = 0F8H,当执行ADD A,#0A9H指令后,PSW中的OV、CY、AC、P各为多少?若是有符号数,A中的结果用十进制表示是多少?(共5 分)[解答] OV:0、CY:1、AC:1、P:1 A:-953、在两个8051间用模式2进行串行通信,A机并行采集外部开关的输入,然后串行传输给B机;B机接收后并行输出控制LED发光。
画出连接示意图,写出完整的程序。
(共15 分)4、将8051外部扩展2K EPROM,同时扩展16K RAM作数据存储器,采用的2716是2K 的EPROM芯片,6264是8K的RAM芯片,74LS373是8位锁存器。
请画出连接示意图。
要求画出8051的数据、地址、ALE、PSEN、RD、WR信号;锁存器的数据入D、数据出Q、锁存控制G、OE;2716的A、数据O、片选CE、输出使能OE;6264的A、D、CE、OE、WE。
16位单片机实验指导书

16位单片机应用实验指导书电子与信息工程学院2O15年2月实验一MC9S12XS128入门实验一.实验目的1.熟悉CodeWarrior嵌入式开发系统软硬件环境,掌握其使用方法及调试方式。
2.掌握S12 GPIO接口的使用方法及编程方法。
3.熟悉S12单片机的C语言程序编程框架。
4.理解样例中的第一个C语言程序代码。
二.实验设备及其连接1.PC机一台2.S12嵌入式开发实验板一套3.接线原理图实验板上有8个发光二级管和4个按钮开关, 8个发光二级管由单片机的PB口8个IO引脚控制, PB0-PB7输出低电平时LED点亮, 输出高电平时LED熄灭。
4个独立的按键输入直接连接到PP口的PP4-PP7引脚, 常态下为高电平, 按键按下时, CPU相应I/O引脚将检测到低电平, XS128芯片的PP口是有中断功能的IO口, 除了可用查询方式检测IO口的状态以外,我们也可以用中断的方式读入按键的状态。
三.实验内容1.使用CodeWarrior嵌入式开发系统的软硬件环境,掌握其使用方法及调试方式。
2.调试运行提供的样例程序light,观看实验结果。
(软件使用参见第四部分)3.运行样例程序,观察小灯的闪烁和对应的程序实现;调整延时的长短,继续观察小灯的闪烁。
4.尝试新建自己的工程,自编程序,实现用4个开关控制4个小灯的亮灭. 4个开关分别接在端口P的PTP4~PTP7口,4个小灯则接在PORTB0~PORTB3口, 参见第二部分连接图. 编程实现用这4个开关控制4个小灯,按钮开关按下时,对应小灯亮,否则为暗。
提示:新建工程时芯片选择HCS12X family-〉mc9s12xs128,connection 选择TBDML,然后下一步输入工程路径和名称,再3次下一步,选择默认选项,然后下一步、完成。
在main.c 文件中加入你的代码,主要通过设置数据方向寄存器DDRB DDRP和数据寄存器PORTB PTP来实现开关控制小灯的功能。
毕业设计(论文)--基于单片机的16位DA输出波形设计报告

毕业设计(论文)--基于单片机的16位DA输出波形设计报告技术总结报告设计题目:16位DA输出波形设计学生姓名:专业班级:学号:起止时间:2011年10月1日―2011年11月12日研究地点:目录一、概述 21.1 课题研究的内容和意义 21.2达到的技术指标 2二、系统总体设计 42.1 系统设计方案论证(几种方案选一) 42.2 系统总体框图及简要说明实现了的主要功能 4三、硬件电路设计 63.1 元器件的选择 63.2单片机控制模块133.3温度数据采集模块 143.4显示模块143.5温度数据无线传输电路15四、软件设计174.1主程序流程图174.2其他功能流程图19五、系统调试235.1测试环境和方法235.2测试结果235.3出现问题及解决方法23六、展望26概述1.1 课题研究的内容和意义本课题采用51单片机对两个DAC0832进行控制来实现16位DA输出。
因为高精度DAC转换芯片价格比较贵,而且有时不易购买,通过对2个DAC0832进行控制,可以构成高精度的DAC,既降低了成本又解决了实际需要。
1.2技术指标设计并制作一个基于单片机的16位DA输出,能够输出方波、三角波、正弦波这3种波形,在输出波形的同时能够实现波形的调频和调幅,波形在示波器上显示。
本设计可以通过按键控制实现波形调频,通过改变DA的基准电压输入来实现调幅。
二.系统的总体设计2.1系统设计方案论证第一种方案:直接采用16位DA转换芯片,让单片机对16位DA芯片进行控制,从而输出波形。
第二种方案:采用2个8位DA转换芯片DAC0832,两个DA芯片采用双缓冲数据输入方式,让单片机先后控制这两个DA芯片的数据输入,最后再一起把数据经DA转换器转换输出,从而输出波形。
最终采用第二种方案。
2.2系统总体框图及简要说明实现了的主要功能。
实现了波形输出和波形的调频调幅。
三、硬件电路设计3.1元器件的选择:硬件电路用了STC89C51RC单片机,8位DA转换芯片DAC0832,运放LM358,还有232.3.2单片机控制模块3.3DA输出模块:软件设计主程序流程图:子程序独立按键检测及波形显示程序流程图是否否是否是否是否否是否是否是否总程序:#include#include#include#define uchar unsigned char#define uint unsigned intsbit da1wr1 P1^0;sbit da1wr2 P1^1;sbit da2wr1 P1^2;sbit da2wr2 P1^1;sbit ile P1^3;sbit cs P1^2;sbit key1 P3^4;sbit key2 P3^5;sbit key3 P3^6;sbit key4 P3^7;uint i 0;uint ih 0;uint il 0;//uchar numdis 0;uchar a 0;uchar d 0;uchar c 10;uchar k;uchar num 3;uchar code tab[256]0x80,0x82,0x85,0x88,0x8b,0x8e,0x91,0x94,0x97,0x9a,0x9d,0xa0,0x a3,0xa6,0xa9,0xac,0xaf,0xb2,0xb6,0xb9,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0x cc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0x ea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0x fc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x ff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0x f2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0x d8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0x b4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x 89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x 38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x 18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x 05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x 0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x 22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x 45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x 6f,0x72,0x76,0x79,0x7c,0x80;code unsigned char table[2] 0,255 ;void delayms uint xmsuint i,j;for i xms;i 0;i--for j 110;j 0;j-- ;/*void delayuchar i;for i 0;i 255;i++ ;*//*void delay1 int x //延时函数TH0 65536-x /256;TL0 65536-x %256;TR0 1;while !flag ;flag 0;*/void keyscanif key1 0delayms 10 ;if key1 0a a+1;while !key1 ;if a 6a 1;if a! 0if key2 0delayms 10 ;if key2 0while !key2 ;c++;num num+1;if num 10 num 1;if c 20 c 5;if key3 0delayms 10 ;if key3 0while !key3 ;c--;num--;if num 0 num 10;if c 3 c 20;void display uchar aif a 2 //方波//da1wr1 0;//da2wr1 0;//da1wr2 0;P0 0;da1wr1 0;da1wr1 1;da2wr1 0;da2wr1 1;da1wr2 0;da1wr2 1;for k 0;k c-2;k++_nop_ ;P0 255;da1wr1 0;da1wr1 1;da2wr1 1;da1wr2 0;da1wr2 1;for k 0;k c;k++_nop_ ;if a 1 // 三角波if d 0i i+5;if i 65535 d 1;ih i/256;il i%256;P0 il;da1wr1 0;da1wr1 1;P0 ih;da2wr1 0;da2wr1 1;da2wr2 0;for k 0;k c;k++_nop_ ;elsei i-5;if i 5 d 0;if i 65535 d 1;ih i/256;il i%256;P0 il;da1wr1 0;da1wr1 1;P0 ih;da2wr1 0;da2wr1 1;da2wr2 0;da2wr2 1;for k 0;k c;k++_nop_ ;if a 3 //正弦波if ++i 256 i 0;P0 tab[i];da1wr1 0;da1wr1 1;da2wr1 0;da2wr1 1;da1wr2 0;da1wr2 1;for k 0;k c;k++_nop_ ;void mainile 1;cs 0;da1wr1 1;da2wr1 1;da1wr2 1;while 1keyscan ;display a ;系统调试测试环境和方法软件测试软件测试的环境是在Proteus软件。
用单片机语言设计16位加法计算器实验报告

湖北第二师范学院计算机学院09计应单片机课程设计实验报告课程设计名称:电子计算器课程设计单位:10计应(1)班课设小组成员:徐凡(1060310039)凡平(1060310058)彭浩(1060310045)桂银(1060310010)潘光卉(1060300033)完成时间:2012年04月02日至2012年04月 24 日单片机课程设计实验报告课程设计题目:简易计算器作品功能描述:当通过输入键盘数字时,能够在显示器上显示输出的数值,并且通过想实现的简单运算功能,实现计算器的加、减、乘、除和清零,并将结果显示出来。
小组成员工作分工:徐凡:程序主框架的构造和主要功能函数的设计。
凡平:原理图的设计和硬件的焊接。
彭浩:基本功能函数的设计(“+,-,*,/”)。
桂银:程序流程图的设计和键盘扫描程序的实现。
潘光卉:编写文档和功能测试。
硬件电路设计:本设计中我们用的是AT89C52芯片,LCD1602 (PROTEUS中为LM016L)就是那个液晶屏,因为可以显示2行16个字符,故叫做LCD1602.11.0592M或12M晶振(CRYSTAL),两者均可,但要涉及到串口需选用12MKEYPAD-SMALLCALC就是那个4X4键盘电容20~30PF(CAP),接最小电路电容10PF主要接复位电路RESPACK-8排阻,为20K的,一个引脚接正极,另8个引脚接I/O口接RES电阻10K,接复位电路实物照片:硬件原理图原理说明:1,上电后,屏幕初始化;2,计算。
按下数字键,屏幕显示要运行的第一个数字,再按下符号键,然后再按下数字键,屏幕显示要运算的第二个数字,最后按下“=”号键,屏幕上显示出计算结果。
3,如果要再次计算,可以按下“ON/C”键清零,或者继续按下数字键,即可重新计算。
键盘使用说明如下:按键功能说明:Array“+”实现两个数的相加“-”实现两个数的相减“×”实现两个数的乘积“÷”实现两个数商的运算“ON/C”计算器显示的清零和接通电源程序控制流程图:软件设计:在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。
单片机大作业题目1-30

须知:1. 大作业的所有题目都应在PROTEUS 7.5(注意:只能使用7.5版本)仿真环境下运行通过。
2. 要求:(1)在keil IDE(μvision3)中完成应用程序设计、并编译;(2)在PROTEUS 7.5下的ISIS Professional中完成电路设计、调试与仿真通过。
题目1 智能电子钟(LCD显示)设计要求:以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:(1) 计时:秒、分、时、天、周、月、年。
(2) 闰年自动判别。
(3) 时间、月、日交替显示。
(4) 自定任意时刻自动开/关屏。
(5) 计时精度:误差≤1秒/月(具有微调设置)。
题目2 电子时钟(LCD显示)设计要求以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间:●使用字符型LCD显示器显示当前时间。
●显示格式为“时时:分分:秒秒”。
●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引脚上。
功能键K1~K4功能如下。
●K1—进入设置现在的时间。
●K2—设置小时。
●K3—设置分钟。
●K4—确认完成设置。
程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。
题目3 秒表设计要求应用AT89C51的定时器设计一个2位的LED数码显示作为“秒表”:显示时间为00~99s,每秒自动加1,设计一个“开始”键,按下“开始”键秒表开始计时。
设计一个“复位”键,按下“复位”键后,秒表从0开始计时。
题目4 定时闹钟设计要求使用AT89C51单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟。
定时闹钟的基本功能如下:●显示格式为“时时:分分”。
●由LED闪动来做秒计数表示。
●一旦时间到则发出声响,同时继电器启动,可以扩充控制家电的开启和关闭。
程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00”,按下操作键K1~K4动作如下:(1) K1—设置现在的时间。
单片机大作业

西安电子科技大学单片机大作业学院:电子工程学院班级:02121X班姓名:XXX学号:0212XXX指导老师:XXX温度控制系统设计一、温度控制系统设计发展历史及意义在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。
这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。
传统的继电器调温电路简单实用 ,但由于继电器动作频繁 ,可能会因触点不良而影响正常工作。
控制领域还大量采用传统的PID控制方式,但PID控制对象的模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。
而采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。
数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。
由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。
更能串接多个数字温度传感器DS18B20进行范围的温度检测。
二、DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图3所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海电力学院
《16位单片机应用》大作业
课程名称16位单片机应用
课程编号260717001
院(系)电子与信息工程学院
专业电子科学与技术
任课教师杨芳
班级2013142
姓名DANGDANG 学号 2013000
题目:十六位单片机----密码锁
一、设计目的及要求
运用C语言,MC9S12XS128的知识,对实现密码锁进行软件和硬件的设计和调试,掌握如何使用CodeWarrior来整合各种驱动模块,例如本实验运用到的键盘中断、LCD、PWM以及小灯模块,将这些模块整合在一起再通过算法实现硬件上的运行,达到密码锁的功能。
密码锁主要功能:
利用键盘中断、LCD、小灯、PWM模块,按下按键,在LCD可以显示对应值,并将其与预设密码进行比对。
若正确,则LCD显示right,小灯由暗变亮;否则,LCD显示wrong,小灯一直保持流水灯状态,直至输入的密码正确。
二、设计内容与实现过程
本次用到了相对还是比较多的模块,主要有SCI串口通信模块,LED显示模块,LCD显示模块,Timer定时器模块和中断模块,主要采用了定时器和中断的方式去控制整个系统的工作,能在超级终端以及LCD上实时显示时分秒的数据,主要是在Timer的样例程序中对当中的一些驱动以及主函数中数据的定义进行一定量的修改,来保证控制功能的实现。
具体功能和实现过程如下:
1、Main 函数
(1)全局变量定义
2、实验采用的模块
①LCD 显示模块
运行程序后,LCD上会显示“password: r/w: ”,在对应位置还会显示按下的键位对应的定义值。
②键盘中断模块
按下键位后,键值存入valve,调用KBDef函数,将valve键值转为定义值,存入num数组中。
③小灯显示模块
小灯为共阳极程序运行后,PORTB已在前面设置为输出,小灯会出现流水灯现象。
④PWM模块
Period为PWM周期所占时钟周期数,duty为PWM占空比所占的PWM周期数。
此处不断增加占空比,实现小灯由暗变亮的显示。
三、小结
此次课程设计,我使用了键盘中断、LCD、小灯以及PWM模块,共四个模块,设计出了一个密码锁。
在本次试验中,我不可避免的遇到一些问题:PWMSetting函数理解不够深入。
程序中所用的PWM相关语句在之前做PWM 实验时已有接触,经过了解发现,period为PWM周期占时钟周期的个数,duty 为PWM占空比占PWM周期的个数,但对于PWMSetting函数的功能如何实现不太理解。
在这次实验中,我不断地发现问题、解决问题,将理论运用与实际,更好的把握了课本上学到的知识,进一步认识了软件和硬件,也大大提高了自己的动手能力,使我受益匪浅。
四、最后结果。