PIC单片机课程设计报告
- 格式:doc
- 大小:346.00 KB
- 文档页数:21
《PIC单片机实训》课程设计(或微型直流电机转速控制或交流电压/频率检测)学生姓名:学号:专业班级:指导教师:二○一一年九月二十三日目录(二号字体)一. 课程设计目的 (3)二. 课程设计题目描述和要求 (3)三. 课程设计报告内容 (4)四.课程设计总结 (14)一.课程设计目的《PIC单片机课程设计》是电气工程及其自动化专业及相近专业的一门重要的专业实践课,本课程在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC 单片机的应用方法,熟练PIC 单片机的C 程序的编写与调试,是毕业设计前的一次重要的实践。
二.课程设计题目描述和要求根据附图1~附图5,设计一个具有完整功能、有一定工作量与一定难度的单片机应用线路,并绘制能用于仿真的Proteus 线路图,编制相应的单片机C 语言,分别在Proteus 仿真界面和实物板上调试运行正确。
最后用实物进行运行演示。
本设计内容分为线路设计、绘制Proteus线路图、编程调试几个部分。
1.线路设计本设计采用短路插和杜邦线连接的方式未用部分短路插应拔起,避免与其他硬件部分冲突并节省电源,并避免与电源相关的芯片发热。
电机速度控制:包括电机电压PWM控制、电机速度检测(使用光电遮断器)、电机转速显示(LCD或数码管)、按键(速度整定等)。
2.Proteus 线路图绘制根据所设计的线路图,绘制与之一致的,能用于仿真的Proteus 线路图。
要求所绘的线路图美观、紧凑,参数要与课设板一致。
3.软件编制与调试根据所设计的线路图编制相应的单片机C 程序,要求所编制的程序符合C 语言格式并加上注解。
每编一段即进行编译,有错及时修改,并先在Proteus上仿真,基本正确后再用ICD2仿真,最后应脱机运行。
三.课程设计报告内容1.设计程序#include <pic.h>__CONFIG (0x20F1); //运行用//引脚定义#define LCD_RS RD4 //LCD 寄存器选择数据H/指令L #define LCD_RW RD5 //LCD 读H/L写控制线#define LCD_E RD6 //LCD E 时钟//常数定义#define DAT 1 //LCD写数据时为1#define COM 0 //LCD写命令时为0#define LINE1 0b10000000 //第一行定义#define LINE2 0b11000000//函数声明void interrupt ISR(void);void CSH(void);void LCD_CSH(void);void LCD_BUSY(void);void LCD_WRITE(char,char);void LCD_WRITE_4(char,char);char LCD_READ(void);void DISP_MENU(const char *);void DISP_ST_DT(char);void DISP_ST_DT1(char);void BCD(unsigned int);void DELAY(unsigned int);void DELAY_I(unsigned int);void DELAY_US(char);void PWM(void);//宏定义,清屏#define CLR_LCD() \LCD_WRITE(0b00000001,COM); \DELAY(2)//变量定义const char AA[17]="LINYANJUN2610800";char QW,BW,SW,GW; //无符号字符0--255int START_T,DELTA_T,RZ,RF; //有符号整形,2个字节long T1N; //有符号长整形,4字节signed char KEY_CHANGE,KEY_SET,KEY_INC,KEY_DEC,KEY_T1N;const int BB[8]={2000,800,255,255,255,255,255,255};//PWM初始化void PWM(void){ TRISC1=0;PR2=255; //晶振4MHZ,频率1KHZ,占空比20% CCPR2L=0x32;CCP2CON=0b00101100; //PWM模式,TMR2是其工作时基T2CON=0b00000101;}//LCD模块初始化void LCD_CSH(void){ DELAY(20); //延时20msLCD_WRITE_4(0b0011,COM); //发送控制序列DELAY(10); //延时10msLCD_WRITE_4(0b0011,COM); //发送控制序列DELAY_US(10); //延时100usLCD_WRITE_4(0b0011,COM); //发送控制序列DELAY_US(10); //延时100usLCD_WRITE_4(0b0010,COM); //4位数据格式LCD_BUSY(); //LCD忙检测LCD_WRITE(0b00101000,COM);LCD_WRITE(0b00001100,COM);CLR_LCD();LCD_WRITE(0b00000110,COM);}void CSH(void){ TRISD=0; //D口全为输出TRISB=0b00000111; //B口低三位为输入TRISC=0b00000100; //C口设置ANSEL=0;ANSELH=0b00000000; //数字口WPUB=0b00000111; //887P224设置B口弱上拉使能IOCB=0b00000111;KEY_SET=0;KEY_INC=0;KEY_DEC=0;LCD_CSH(); //LCD初始化OPTION=0b00111111; //INT下降上升沿中断INTCON=0b11011000; //中断控制寄存器//初始化CCP1CON=0; //CCP模块关闭CCP1IF=0; //中断标志位CCP1CON=0b00000110; //捕捉四个上升沿T1CON=0b00110001;TMR1H=TMR1L=0;CCP1IE=1;START_T=BB[0];}//主程序void main(void){signed char R1;unsigned int i;CSH(); //全部的初始化PWM(); //PWM的初始化DISP_MENU(AA); //显示(AA)中的数DELAY(1000); //延时1s看清上行显示的内容CLR_LCD();DISP_ST_DT(START_T);DISP_ST_DT1(DELTA_T);DELAY(100);while(1){ if (KEY_SET==1) //设置按键按1次{ if(KEY_INC==1) //按下加按键{ START_T+=100;if (START_T>=2500){START_T=2500;}KEY_INC=0; //处理结束清0避免重复处理KEY_CHANGE=1; //已经改变设置标志刷新显示}if(KEY_DEC==1) //按下减按键{ START_T-=100;if (START_T<=500){START_T=500;}KEY_DEC=0;KEY_CHANGE=1;}if(KEY_CHANGE==1) //如果有修改{ DISP_ST_DT(START_T);KEY_CHANGE=0;}}if(START_T>DELTA_T){ CCPR2L+=1;DELAY(500);}if(START_T<DELTA_T){ CCPR2L-=1;DELAY(500);}if(KEY_T1N>=1){ DISP_ST_DT1(DELTA_T);DELAY(80);TMR1H=TMR1L=0;T1CON=0b00110001;CCP1IE=1;CCP1CON=0b00000110;KEY_T1N=0;}}}//LCD上的显示void DISP_ST_DT(char ST){ LCD_WRITE(0b00001100,COM); //不闪LCD_WRITE(LINE1+4,COM); //即第1行的第4个字符BCD(START_T);LCD_WRITE('R',DAT); //在当前位置显示字符'R' LCD_WRITE('1',DAT); //在当前位置显示字符'1' LCD_WRITE('=',DAT);LCD_WRITE(QW+0x30,DAT); //显示千位LCD_WRITE(BW+0x30,DAT); //显示百位LCD_WRITE(SW+0x30,DAT); //显示十位LCD_WRITE(GW+0x30,DAT); //显示个位LCD_WRITE('r',DAT); //在当前位置显示字符'r'LCD_WRITE('/',DAT); //在当前位置显示字符'/' LCD_WRITE('n',DAT); //在当前位置显示字符'n'}void DISP_ST_DT1(char DT){BCD(DELTA_T);LCD_WRITE(LINE2+4,COM); //即第2行的第4个字符LCD_WRITE('R',DAT); //在当前位置显示字符'R' LCD_WRITE('2',DAT); //在当前位置显示字符'2' LCD_WRITE('=',DAT); //在当前位置显示字符'=' LCD_WRITE(QW+0x30,DAT); //显示千位LCD_WRITE(BW+0x30,DAT); //显示百位LCD_WRITE(SW+0x30,DAT); //显示十位LCD_WRITE(GW+0x30,DAT); ; //显示个位LCD_WRITE('r',DAT); //在当前位置显示字符'r' LCD_WRITE('/',DAT); //在当前位置显示字符'/' LCD_WRITE('n',DAT); //在当前位置显示字符'n'}void interrupt ISR(void){ if(INTF==1&&RB0==0) //中断标志INTF { DELAY_I(30);KEY_SET+=1;if(KEY_SET>=2){KEY_SET=0;}INTF=0;INTCON=0b11011000;}if(RBIF==1){ DELAY_I(30);if (RB1==0 && KEY_SET==1){ KEY_DEC=1;}if (RB2==0 && KEY_SET==1){ KEY_INC=1;}RBIF=0;}if(CCP1IF==1&&RB0==1&&RB1==1&&RB2==1) //捕捉的中断{ KEY_T1N=1; //捕捉4个下降沿完成T1N=CCPR1H;T1N=T1N<<8;T1N=T1N+CCPR1L;T1N=T1N*8; //4个脉冲,1转的时间CCPR1H=CCPR1L=0;DELTA_T=60000000/T1N;CCP1IE=0;T1CON=0;CCP1CON=0;CCP1IF=0;}}//写R1的高4位,FLAG为寄存器选择void LCD_WRITE_4(char R1,char FLAG){ LCD_RW=0; //写模式LCD_RS=FLAG; //寄存器选择PORTD &= 0b11110000; //RB的数据4位清0LCD_E=1; //使能PORTD |=R1; //送R1的低4位至RB口的高4位NOP();NOP(); //短延时LCD_E=0; //数据送入有效LCD_RS=0;PORTD &= 0b11110000; //RB的数据4位清0 }//写一字节数R1,FLAG为写命令或数据选择,0为写命令,1为写数据void LCD_WRITE(char R1,char FLAG){char R2;LCD_BUSY();R2=R1>>4;LCD_WRITE_4(R2,FLAG);R2=R1 & 0x0F;LCD_WRITE_4(R2,FLAG);}//读LCD状态char LCD_READ(void){ char R1;LCD_RS=0; //寄存器选择LCD_RW=1; //读为1NOP();NOP(); //短延时LCD_E=1; //使能NOP();NOP(); //短延时R1=PORTD;R1=R1<<4; //读数据的高4位给R1高4位R1=R1 & 0xF0;LCD_E=0; //读数据结束NOP();NOP(); //短延时LCD_E=1; //使能NOP();NOP();R1 |= PORTD>>1; //读PORTB的1-4位,R1的高4位不变!LCD_E=0; //读数据结束LCD_RW=0;return (R1);}//检测LCD是否忙void LCD_BUSY(void){ char R1;while(1){ R1=LCD_READ(); //读寄存器if ((R1 & 0x80)==0x00) //最高位为忙标志位break;};}//整屏显示void DISP_MENU(const char *A){char i;CLR_LCD();LCD_WRITE(LINE1,COM); //回到行首for (i=0;i<16;i++)LCD_WRITE(A[i],DAT); //显示16个字符,ASCII码对应的字符}//从R1双字节数转换为十进制数千位-个位: QW,BW,SW,GWvoid BCD(unsigned int R1){ QW=0;BW=0;SW=0;GW=0;while(R1>=1000){R1-=1000;QW++;}while(R1>=100){R1-=100;BW++;}while(R1>=10){R1-=10; SW++;}GW=R1;}//延时(n)msvoid DELAY(unsigned int n){ unsigned int j;char k;for (j=0;j<n;j++)for (k=246;k>0;k--) NOP();}//延时(n)ms,中断专用 void DELAY_I(unsigned int n) { unsigned int j; char k;for (j=0;j<n;j++)for (k=246;k>0;k--) NOP();}//延时(n ×10)us void DELAY_US(char n) { char j; for (j=0;j<n;j++){NOP();NOP();}}2. PROTEUSE 线路接线图D 7D 6D 5D 4D 3D 2D 1D 0ER W R S V S S V D D V E E3.设计说明1.确定期望转速在用PROTEUS 仿真中。
X X X X 《PIC单片机课程设计》数字钟设计报告学生: x x x学号: ***********专业: *****************班级: ****************指导教师: **********二○一二年 12 月 16 日目录1.课程设计目的 (2)2.课程设计要求 (2)3.课程设计容 (2)4.问题分析 (6)5.设计体会 (6)6.参考书目 (6)7.附:PIC程序与仿真图 (7)1.课程设计目的①进一步熟悉PIC单片机原理与应用;②巩固并提高对这学期PIC单片机知识的学习和应用;③熟悉对PIC16F887的编程;④掌握实验板上的操作和运用;⑤了解数字钟的组成和原理,编写程序并在实验板上运行。
2.课程设计要求1)运用所学的PIC单片机知识,对PIC16F887进行编程,实现数字钟的功能。
2)在软件仿真可行后,下载到实验板上进行演示。
3)在基本功能实现的基础上,可以适当的添加一些附加功能。
4)设计完毕后,总结和整理资料,写成设计报告。
3.课程设计容运用PIC16F887芯片和DS1307时钟芯片,用C语言编程,通过ICD2烧写进芯片,在1602液晶显示屏上实现时间显示、运行的功能称为数字钟。
液晶显示屏显示着年、月、日、时、分、秒、星期。
数字钟有调整时间的功能,通过对按键的操作可以对时间进行调整。
3.1系统功能说明显示屏分两行显示,第一行显示日期:年—月—日、星期,第二行显示格式为时间(时:分:秒)。
显示秒由00一直加到59,分钟由00加到59,小时采用24小时制,由00加到23,星期由1一直加到7,日由01一直加到31,月由01一直加到12,年由2000一直加到2099。
按键操作时,按键S1按下时,数字加;按键S5按下时,数字减;按键S9按下时,位左移;按键S13按下时,位右移。
3.2设计步骤1、先画好仿真图;2、把数字钟分为几个模块,分别完成一个一个模块的编程;3、各个模块程序编写完成后,用仿真图仿真;4、若仿真图可实现,则把各个模块程序下载到实验板上运行;5、各个模块完成后再把各个模块串联起来,进行调试。
PIC单片机原理及应用第三版课程设计一、前言PIC单片机原理及应用是一门非常重要的课程,它是在电子工程、计算机科学等领域中必须学习的基础课程之一。
本文将介绍PIC单片机的原理和应用,并且将会介绍一份课程设计,希望对读者有所帮助。
二、PIC单片机的原理单片机是一种集成电路,它包含了一些用于控制和处理数据的硬件设备。
PIC单片机是由美国微芯科技公司(Microchip Technology Inc.)生产的,是一种非常流行的单片机,它广泛应用于各种计算机和电子系统中。
PIC单片机的结构包括三个部分:处理器核心、外围设备和存储器。
1. 处理器核心PIC单片机的处理器核心采用RISC(Reduced Instruction Set Computing,精简指令集)结构,该结构在指令的执行速度和效率方面相对较高。
PIC单片机的处理器核心包括了一个15位或33位的存储器指针、一个独立的数据寄存器和一个常量移位器等。
2. 外围设备PIC单片机的外围设备包括了很多种外设,比如通用输入/输出端口(GPIO)、模拟模块、定时器、计数器、USART(通用异步收发传输器)等。
这些外设可以用于很多种不同的应用中。
3. 存储器PIC单片机的存储器包括了程序存储器和数据存储器两种。
程序存储器存储了单片机的指令和程序,而数据存储器可以存储程序中用到的数据。
三、PIC单片机的应用PIC单片机在很多领域都有着广泛的应用,包括电子、工业、计算机等。
1. 电子应用在电子应用领域中,PIC单片机由于体积小、功耗低、成本低等优点,被广泛应用于各种控制系统、智能家居、数字音频处理等方面。
2. 工业应用在工业应用领域中,PIC单片机被用于控制和监控各种工业设备和生产过程。
比如说,一些自动化工厂中的计数器、条码扫描器、工艺控制器等都是由PIC单片机控制的。
3. 计算机应用在计算机应用领域中,PIC单片机和各种其他的硬件设备一起被用于开发各种类型的计算机系统。
PIC单片机实用教程基础篇第二版教学设计一、目标通过本教程,学生将会:1.理解单片机的概念2.掌握PIC单片机的基础知识和使用方法3.熟悉PIC单片机的编程语言4.能够使用C编程语言控制单片机进行简单的控制操作二、学习内容及进度安排1. 单片机基础•了解单片机本质•认识处理器架构•熟练掌握单片机的外设及寄存器的使用时间安排:2周2. PIC单片机基础知识•了解PIC单片机芯片的特性和类型•熟悉PIC单片机芯片引脚和内部结构•学习PIC单片机的编程和调试方法时间安排:3周3. PIC单片机的编程语言——C•学习C语言的基础语法•掌握C语言中的控制流、数组和指针等知识点•理解C语言在单片机编程中的应用时间安排:5周4. PIC单片机的应用•学习常用的PIC单片机应用案例•掌握控制外部设备的方法•编程并实现一个简单的单片机控制系统时间安排:4周三、教学方法•针对不同的学习内容采用不同的教学方法,如讲解、演示、实践等•采用案例教学法,将知识点与实际应用相结合进行教学•通过实践项目激发学生的兴趣和学习热情,增加对知识点的理解和掌握程度四、教学评估•通过课堂练习、作业和项目实践等方式进行评估•课堂练习占20%的总评分,作业占30%的总评分,项目实践占50%的总评分•评估标准包括学生的知识掌握、实践能力和综合素质等五、教学资源•本教程采用PIC单片机实用教程基础篇第二版教材•部分实践项目会涉及到外部设备,需要相应的硬件设备支持•可以提供相应的开发环境和编程软件六、教学团队•主讲教师:张XX,工程师,从事单片机嵌入式开发多年,有丰富的实践经验和教学经验•助教:李XX、王XX等,均为一线从业人员,能够提供实用的教学帮助。
pic单片机做课程设计一、课程目标知识目标:1. 理解PIC单片机的基本结构、工作原理及功能特点;2. 掌握PIC单片机的编程语言和开发环境;3. 学会使用PIC单片机进行简单的电路设计和控制系统搭建;4. 了解单片机在现实生活中的应用,培养对电子技术的兴趣。
技能目标:1. 能够运用所学的PIC单片机知识,设计并完成具有一定功能的课程项目;2. 培养动手实践能力,学会焊接、调试和排错;3. 提高问题分析能力,能够针对实际问题设计合理的单片机控制系统;4. 增强团队协作能力,学会在项目中进行沟通与分工。
情感态度价值观目标:1. 培养学生对电子技术的热情,激发学习兴趣;2. 培养学生具备良好的学习习惯,积极面对挑战,勇于克服困难;3. 增强学生的创新意识,鼓励他们在课程设计中发挥想象力和创造力;4. 培养学生的环保意识,关注电子垃圾处理和资源节约。
本课程针对高年级学生,结合学科特点和教学要求,注重理论与实践相结合,旨在提高学生的动手能力、创新意识和团队协作能力。
通过课程学习,使学生掌握PIC单片机的相关知识,为今后从事电子技术领域的工作打下基础。
同时,课程目标分解为具体的学习成果,便于教学设计和评估,确保课程实施的有效性。
二、教学内容1. PIC单片机基本结构:介绍PIC单片机的内部结构,包括CPU、存储器、输入输出端口等,参考教材第二章内容;2. PIC单片机工作原理:讲解PIC单片机的工作原理,包括指令执行、中断处理等,参考教材第三章内容;3. 编程语言与开发环境:学习PIC单片机的编程语言(如C语言)及开发环境(如MPLAB),参考教材第四章内容;4. 基本电路设计与控制:教授如何使用PIC单片机设计简单的电路和控制系统,参考教材第五章内容;- 输入输出控制;- 定时器/计数器应用;- 中断处理;5. 应用案例与项目实践:分析PIC单片机在实际应用中的案例,如温度控制系统、智能小车等,参考教材第六章内容;6. 课程项目设计与实施:指导学生进行课程项目设计,要求具备一定功能,并能实际操作,结合教材内容及实际需求进行。
pic单片机课程设计一、课程目标知识目标:1. 让学生掌握PIC单片机的基本结构、工作原理及功能特点;2. 使学生了解并熟练运用PIC单片机的指令系统,进行简单的程序设计;3. 让学生掌握PIC单片机外围电路的设计方法,并能进行基本的电路搭建。
技能目标:1. 培养学生具备使用PIC单片机进行嵌入式系统开发的能力;2. 培养学生运用编程软件(如MPLAB)进行程序编写、调试的能力;3. 提高学生分析问题、解决问题的能力,使其能够运用所学知识解决实际问题。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发其探索精神;2. 培养学生具备良好的团队合作意识,使其在项目实践中互相学习、共同成长;3. 培养学生具备创新意识,鼓励其在课程设计中勇于尝试新方法、新技术。
课程性质:本课程为实践性较强的课程,以项目为导向,注重培养学生的动手能力和实际应用能力。
学生特点:学生具备一定的电子基础和编程基础,对新技术具有好奇心,喜欢动手实践。
教学要求:结合学生特点,课程设计应注重理论与实践相结合,充分调动学生的积极性,引导其主动参与教学活动,提高学生的实际操作能力。
在教学过程中,关注学生的个体差异,因材施教,使每位学生都能在课程中收获成长。
通过课程目标的实现,为学生在后续的嵌入式系统开发领域打下坚实基础。
二、教学内容1. PIC单片机基本原理- 单片机概述、发展历程及分类- PIC单片机的内部结构、工作原理及性能特点2. PIC单片机指令系统与编程- 指令集介绍、指令格式及操作方法- 程序设计基础:顺序结构、分支结构、循环结构- 编程实例分析及练习3. PIC单片机外围电路设计- 常用外围元器件及其功能- 基本电路设计方法:输入/输出接口、模拟/数字转换、定时器/计数器等- 电路搭建与调试技巧4. 嵌入式系统项目实践- 项目分析与需求分析- 系统设计、程序编写及调试- 系统测试与优化5. 教学内容安排与进度- 第一章:PIC单片机基本原理(2课时)- 第二章:PIC单片机指令系统与编程(4课时)- 第三章:PIC单片机外围电路设计(4课时)- 第四章:嵌入式系统项目实践(6课时)教学内容依据课程目标,结合教材章节进行组织,注重理论与实践相结合,使学生能够循序渐进地掌握PIC单片机的相关知识和技能。
pic课程设计一、课程目标知识目标:1. 学生能理解并掌握课程核心概念,如XXX(此处填写具体学科概念),建立扎实的理论基础。
2. 学生能运用所学知识,分析和解决实际生活中的问题,将理论知识与实际应用相结合。
技能目标:1. 学生通过本课程的学习,培养良好的XXX(此处填写学科相关技能,如实验操作、数据处理等)技能,提高实践操作能力。
2. 学生能够运用所学技能,独立完成课程项目,具备一定的创新意识和团队协作能力。
情感态度价值观目标:1. 学生在学习过程中,培养对学科的兴趣和热情,形成积极向上的学习态度。
2. 学生通过课程学习,认识到所学知识在现实生活中的重要性,增强社会责任感和使命感。
3. 学生在团队合作中,学会尊重他人,培养良好的沟通能力和团队精神。
课程性质:本课程为XXX学科(此处填写具体学科)的示范课,旨在帮助学生巩固基础知识,提高实践能力,培养创新精神和团队协作能力。
学生特点:考虑到学生所在年级的特点,课程设计将注重知识性与趣味性相结合,激发学生的学习兴趣,同时关注学生的个体差异,因材施教。
教学要求:教师应关注学生的实际需求,注重启发式教学,引导学生主动探究,提高课堂互动效果。
同时,注重过程性评价,及时了解学生的学习进度,调整教学策略,确保课程目标的达成。
二、教学内容根据课程目标,本章节教学内容主要包括以下几部分:1. 知识讲解:- 教材章节:XXX(此处填写教材具体章节)- 内容列举:XXX(此处列举具体教学内容,如基本概念、原理、公式等)2. 实践操作:- 教材章节:XXX(此处填写教材具体章节)- 内容列举:XXX(此处列举实践操作相关内容,如实验、案例分析等)3. 知识拓展:- 教材章节:XXX(此处填写教材具体章节)- 内容列举:XXX(此处列举拓展性内容,如学科前沿、跨学科知识等)4. 课程项目:- 教材章节:XXX(此处填写教材具体章节)- 内容列举:XXX(此处列举课程项目相关内容,明确项目目标、任务分配等)教学大纲安排如下:1. 导入新课:通过生活实例或问题,激发学生兴趣,引出本节课的学习内容。
==《PIC单片机》课程设计学生姓名:学号:专业班级:指导教师:二○○12年05 月04 日目录(二号字体)1 设计方案,目的,内容. (1)2.设计的硬件及说明 (1)3.设计的软件及说明 (5)4 实验结果 (6)5小结 (7)一课程设计的目的《PIC 单片机课程设计》是电气工程及其自动化专业及相近专业的一门重要的专业实践课,本课程在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC 单片机的应用方法,熟练PIC 单片机的C 程序的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。
二设计内容1 Proteus 线路图绘制根据所设计的线路图,绘制与之一致的,能用于仿真的Proteus 线路图。
要求所绘的线路图美观、紧凑,参数要与课设一致。
2、软件编制与调试根据所设计的线路图制相应的单片机C 程序,要求所制的程序符合C 语言格式并加上注解。
每编一段即进行译,有错及时修改,并先在Proteus 上仿真,基本正确后再用PICkit3 在线调试,最后应脱机运行。
三设计方案1我做的是数字钟及数字温度计:包括按键.LCD.蜂鸣器时钟芯片DS1307和温度传感器TC74。
2功能;此设计可以感测环境的温度,显示当前的时间,及闹钟。
温度与时间都显示在LCD显示屏上。
四硬件设计及说明1复位按键此图用于复位单片机,使其从新执行相应的程序。
12 振荡方式此图是LP.XT.HS的晶体振荡/陶瓷振荡器接线方式,这种方式接线更准。
3时钟芯片DS1307及附属接线时钟芯片DS1307用于产生时间,它提供了秒、分、时、日、年、和星期等数据,能算只瑞年2100年,时钟的晶振是典型的32.768Hz。
(1)其引脚作用如下:2(2)DS1307的读写如下;1写DS1307 的步骤如下:a) 发送启始位;b) 发送DS1307 的7位地址+0 (写),即0b11010000;c) 发送要写入DS1307 的地址,地址见图16,如要修改分,此值为1;d) 发送要写入DS1307 的数,如要把分修改为十进制数37,则此数为0x37;e) 发送停止位;2读DS1307 的步骤如下:a) 发送启始位;b) 发送DS1307 的7位地址+0 (写),即0b11010000;c) 发送要读的DS1307 的起始地址,如要从秒读起,为0;d) 发送停止位;e) 发送重新开始位;f) 发送DS1307 的7位地址+1 (读),即0b11010001;g) 发送读使能位,接收一个数据,单片机发送应答位;h) 发送读使能,接收下一个数据(地址会自动+1),单片机发送应答位,直到读数完成,接收最后一个数时单片机不发送应答位;i) 发送停止位;注意在DS1307仿真的时候七位地址为0b1001101 而实际为0b1001000 ;(3)功能是;提供时间通过pic16F877送入LCD中显示。
pic单片机实验报告
《pic单片机实验报告》
实验目的:通过对pic单片机的实验,掌握其基本原理和应用技能,提高对单
片机的理解和应用能力。
实验内容:
1. 初步了解pic单片机的基本结构和工作原理;
2. 学习pic单片机的编程语言和编程工具;
3. 进行简单的pic单片机实验,如LED灯控制、数码管显示等;
4. 分析实验结果,总结经验和教训。
实验步骤:
1. 阅读pic单片机的相关资料,了解其基本原理和应用领域;
2. 学习pic单片机的编程语言和编程工具,如C语言和MPLAB X IDE;
3. 进行LED灯控制实验,编写简单的程序控制LED的亮灭;
4. 进行数码管显示实验,编写程序实现数字的显示和滚动效果;
5. 分析实验结果,总结经验和教训,找出存在的问题并改进。
实验结果:
1. 成功掌握了pic单片机的基本原理和编程技能;
2. 实现了LED灯控制和数码管显示的实验,并取得了良好的效果;
3. 发现了一些问题,如程序逻辑错误和电路连接不良,及时改进并取得了成功。
实验总结:
通过本次实验,我对pic单片机有了更深入的了解,掌握了其基本原理和编程
技能,提高了对单片机的应用能力。
同时,也发现了一些问题并及时改进,取
得了良好的实验效果。
希望能在今后的学习和工作中,更好地应用pic单片机,为科研和工程项目做出更大的贡献。
PIC单片机报告第一篇:PIC单片机报告PIC单片机实验报告一、定时器的使用(1)实验目的:通过学习和实验理解PIC单片机定时器的内部工作原理,学会定时器初始化配置编程,并能利用实验板对定时器有简单的应用。
(2)实验器材:16位PIC单片机学习板。
(3)实验过程:1、PIC单片机定时器概述:根据具体器件,dsPIC30F 器件系列提供了几个16 位定时器。
这些定时器被指定为Timer1、Timer2、Timer3 ……等。
可分为三种类型:A类型时基、B类型时基和C类型时基。
A类型时基:在大多数dsPIC30F 器件上,至少有一个A 类型定时器。
通常Timer1 是A 类型定时器。
A 类型定时器与其他类型的定时器相比,有下列独特的功能:可以使用器件的低功耗32 kHz 振荡器作为时钟源工作可以在使用外部时钟源的异步模式下工作A 类型定时器独特的功能使它可以用于实时时钟应用(Real-Time Clock,RTC)。
16 位定时器模式:在16 位定时器模式下,定时器在每个指令周期递增,直到与预先装入周期寄存器PR1 中的值匹配,然后复位至0,继续计数。
当CPU 进入空闲模式时,定时器将停止递增,除非TSIDL(T1CON<13>)位 = 0。
如果TSIDL = 1,定时器模块逻辑将继续递增,直到CPU 空闲模式终止。
位同步计数器模式:在16 位同步计数器模式下,定时器将在外部时钟信号的上升沿递增,外部时钟信号与内部相位时钟同步。
定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。
当CPU 进入空闲模式时,同上。
位异步计数器模式:在16 位异步计数器模式下,定时器在外部时钟信号的上升沿递增。
定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。
当定时器配置为异步工作模式时,CPU 进入空闲模式,如果TSIDL = 1,则定时器将停止递增。
B类型时基:在大多数dsPIC30F 器件上,如果存在Timer2 和Timer4,它们是B 类型定时器。
pic单片机实验报告PIC单片机实验报告引言:PIC单片机是一种非常常见的嵌入式系统开发工具,被广泛应用于电子产品的设计与制造过程中。
本实验报告将介绍我对PIC单片机的实验研究,并分享实验过程中的收获和心得体会。
实验一:LED灯的控制在本实验中,我使用PIC单片机来控制一组LED灯的亮灭。
通过编程,我成功实现了按键控制LED灯的开关,以及通过定时器实现LED灯的闪烁效果。
这个实验让我初步了解了PIC单片机的编程方法和基本原理。
实验二:温度传感器的应用在这个实验中,我将PIC单片机与温度传感器连接,并通过编程实现了温度的实时监测和显示。
通过这个实验,我深入了解了模拟信号的采集和数字信号的处理过程,并学会了如何使用PIC单片机进行数据的读取和处理。
实验三:蜂鸣器的控制本实验中,我使用PIC单片机控制了一个蜂鸣器的发声。
通过编程,我实现了不同频率的声音输出,并且可以通过按键控制声音的开关。
这个实验让我了解了如何通过PIC单片机来控制外部设备,并且学会了如何利用定时器来产生不同频率的方波信号。
实验四:液晶显示屏的应用在这个实验中,我将PIC单片机与液晶显示屏连接,并通过编程实现了文字和图形的显示。
通过这个实验,我学会了如何使用PIC单片机来控制液晶显示屏,并且了解了液晶显示屏的基本原理和工作方式。
实验五:无线通信模块的应用在本实验中,我将PIC单片机与无线通信模块连接,并通过编程实现了两个PIC 单片机之间的无线数据传输。
通过这个实验,我了解了无线通信模块的基本原理和工作方式,并学会了如何使用PIC单片机进行无线通信的应用。
结论:通过对PIC单片机的实验研究,我深入了解了PIC单片机的工作原理和应用方法。
通过编程和实践,我成功实现了LED灯的控制、温度传感器的应用、蜂鸣器的控制、液晶显示屏的应用以及无线通信模块的应用。
这些实验不仅让我掌握了PIC单片机的基本编程技巧和应用方法,还培养了我对嵌入式系统开发的兴趣和能力。
pic 课程设计一、课程目标知识目标:1. 学生能掌握课程核心概念,如XXX(具体概念根据学科及课程内容设定),并能够准确运用相关术语表达。
2. 学生能理解课程内容的基本原理,如YYY(原理或定律),并能够将其应用于解决实际问题。
3. 学生能总结和归纳课程中所学的知识点,形成系统性的知识框架。
技能目标:1. 学生能够运用批判性思维分析课程相关案例,提出自己的见解。
2. 学生通过小组合作,提高沟通协调能力,共同完成课程任务。
3. 学生通过实践操作,培养动手能力,提高解决实际问题的技能。
情感态度价值观目标:1. 学生对学科知识产生兴趣,培养主动学习的态度。
2. 学生在学习过程中,树立正确的价值观,如尊重事实、客观公正等。
3. 学生通过课程学习,增强团队协作意识,培养集体荣誉感。
课程性质:结合学科特点,注重理论联系实际,提高学生的实践操作能力和创新能力。
学生特点:考虑到学生所在年级的知识深度,课程设计将注重启发式教学,引导学生主动探索,激发学生的学习兴趣。
教学要求:课程目标具体、可衡量,注重培养学生的学科素养,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。
后续教学设计和评估将围绕这些具体目标展开。
二、教学内容本课程教学内容依据课程目标,结合教材相关章节,进行以下安排:1. 知识点讲解:涵盖教材第X章第Y节的核心概念和原理,如XXX(具体概念)和YYY(原理或定律)的详细解释,通过实例分析,使学生深入理解。
2. 实践操作:依据教材第X章实践活动,设计相关实验或操作,让学生动手实践,提高解决实际问题的能力。
3. 案例分析:选取教材第X章第Z节的相关案例,引导学生运用批判性思维,分析案例,提出解决方案。
4. 小组讨论:针对教材第X章主题,设置小组讨论课题,促进学生之间的沟通与协作,共同探讨问题。
5. 拓展阅读:推荐与课程内容相关的课外阅读材料,帮助学生拓宽知识视野,激发学习兴趣。
教学内容安排和进度如下:第一课时:知识点讲解,核心概念及原理介绍。
目录一、目的 (2)二、描述和要求 (2)三、硬件选择 (2)四、硬件电路图 (5)五、程序设计 (5)六、总结 (7)七、参考书目 (8)附录:程序代码 (9)一、目的随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。
而创自古以来就是把守门户的铁将军,人们对它要求甚高。
即要安全可靠地防盗,又要使用方便,这也是制锁者长期以来研制的主题.传统的门既要备有大量的钥匙。
又要担心钥匙丢失后的麻烦。
另外,如:宾馆、办公大楼、仓库、保险柜等由于人员的变动,开锁的钥匙也不再是只有一人拥有。
购得新居的家庭.由于装修施工等人住时也要把原有的锁胆更换,况且钥匙随身携带也诸多不便。
随着单片机的问世,出现了带微处理器的电子密码锁,它的出现解决了传统锁的许多缺点,使密码锁具有很高的安全性、可靠性。
目前已经大量地应用于日常生活之中.希望通过本课设完成具有一定实用性的电子密码锁,从而培养对单片机学习的兴趣,巩固PIC单片机的知识内容,提高实践动手能力.二、描述和要求1、密码正确则电机转动。
2、密码错误则需重新输入,若连续三次输入错误则报警声响起,键盘被锁.3、按错键时可按“删除”键删除输入键值。
4、按下一个键时响一声,说明按键按下。
三、硬件选择1、单片机PIC16F887本系统设计的核心控制芯片为PIC16F887。
它是一款采用纳瓦技术的40引脚8位CMOS增强型闪存单片机。
PIC16F887具有8K字程序存储器,368字节用户可用数据存储器和256字节EEPROM。
具有36个I/0口,14个A/D通道,1个CCP,1个增强型CCP,1个增强型通用同步/异步收发器,1个主控同步串行端口,2个比较器,2个8位计数器/定时器,1个16位计数器/定时器.PIC16F887引脚图如下:本系统用到的引脚主要有:引脚1:RE3/MCLR/Vpp,系统复位端。
接操作按键K1。
引脚11、32:Vdd,系统电源端.引脚12、31:Vss,系统接地端。
PIC单片机实用教程基础篇第二版课程设计一、课程简介本课程是PIC单片机实用教程基础篇的第二版课程设计,旨在帮助学生深入了解PIC单片机的应用和原理,学会使用MPLAB X IDE软件进行程序编写和调试,掌握单片机的I/O口编程、定时器/计数器编程、ADC/DAC模拟量转换、串口通信等基本技能。
本课程面向电子信息、自动化、机械等相关专业的本科生,适合具有一定计算机和电子基础的学生选修。
二、课程目标1.了解PIC单片机的基本原理和应用领域;2.掌握MPLAB X IDE软件的使用方法;3.掌握PIC单片机I/O口编程;4.掌握定时器/计数器的编程方法;5.掌握ADC/DAC模拟量转换的方法;6.掌握串口通信的基本原理和程序设计方法;7.熟悉单片机系统调试和故障排除方法;8.能够设计并实现简单的单片机控制系统。
三、教学计划教学内容讲解内容实践环节PIC单片机基本原理讲解实验室调试教学内容讲解内容实践环节MPLAB X IDE 软件安装和配置方法实验室配置I/O口基础编程方法讲解LED亮灭实验定时器/计数器编程方法和应用讲解蜂鸣器发声实验ADC/DAC模转换原理和编程方法讲解光敏电阻模拟实验串口通信基本原理和程序设计串口通信应用实验系统调试和排除单片机故障排除方法介绍调试方法实验控制系统设计简单控制系统设计控制系统实战实验备注:以上为教学计划初步草拟,具体时间分配还需根据实际情况进行调整。
四、教学方法1.授课为主导,通过讲解理论知识,加深学生对PIC单片机应用的认识;2.实验为主线,通过实际操作,帮助学生掌握单片机编程的实际应用;3.互动交流,教师与学生之间相互交流与合作,共同完成教学任务。
五、实验评分1.课堂表现:40分;2.实验报告:30分;3.在线答辩:30分。
六、参考资料1.PIC单片机实用教程:基础篇(第二版),陈十一,电子科技出版社,2020年;2.MPLAB X IDE软件使用手册;3.51单片机C语言编程,钱学森,电子工业出版社,2020年。
资料收集于网络,如有侵权请联系网站删除《PIC 单片机课程设计》报告题目:温度监测与控制学生姓名:学号:指导教师:年月日目录一.课程设计性质与目的 (02)二.课程设计任务和要求 (02)三.课程设计具体步骤3.1 总体方案设计说明 (03)3.2 硬件设计说明 (03)3.3 软件设计说明 (06)四.设计总结与体会4.1 设计结果 (08)4.2 问题及解决方法 (08)4.2 感想及体会 (08)五.参考文献 (09)六.附录 (10)一.课程设计性质和目的:《PIC 单片机课程设计》是电气工程与自动化专业及相近专业的一门重要的专业实践课,本课程在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与实际实验板调试的实践,进一步掌握 PIC 单片机的 C 程序语言的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。
具体来说,这次课程设计能让我扩展、加深对 PIC 单片机应用的了解,包括中断、定时器、 PWM、显示等功能模块的应用;接触项目中 C 语言编程的逻辑,如何一步一步实现所想要的功能;通过分析选择元件,学着查找相关元件资料;在后期,优化程序,使之能满足实际运行要求;最终完成该课程设计。
二.课程设计任务和要求:我的课程设计题目是《温度监测与控制》,要求当温度 T 超过电机启动设定值(START_T) 时,为了防止在临界温度值时的风扇频繁启/停,控制风扇的启/停要有一定的回差值(DELTA_T) , 即当 T>=START_T 时启动风扇,当 T<(START_T-DELTA_T) 时关闭风扇,并要求START_T 和 DELTA_T 能由用户设定。
具体来说:1)利用 LCD,显示实时温度,电机启动温度值及温度控制回差值;2)能够通过按键的设置增大或减小转启动温度及回差温度;3)通过 LED 亮灭实现预警;4)通过风扇(直流电机)实现散热。
PIC单片机实用教程-提高篇课程设计简介本文是专门为已经进行过PIC单片机基础教程学习的学生设计的一个提高篇教程。
在本课程中,我们将会更加深入地学习并了解PIC单片机的工作方法与原理,并通过一个实际的课程设计项目来锻炼学生们的创新与实践能力。
本课程所需要的学习资料、软件及硬件设备等详见本文后面的“材料准备”章节。
培养目标本课程着重培养大学本科电子工程及相关专业学生的PIC单片机应用能力,要求学生能够了解单片机基本原理与工作方式、掌握C语言编程方法、独立完成一个实际的电子设计项目。
课程设计项目主题本课程的设计项目主题为“自动化智能控制系统”。
在项目中,学生将会设计一个能够自动检测环境温度和湿度的电子系统,并能够根据检测结果自动启停空调和除湿机等装置。
要求学生采用PIC单片机作为主控芯片,并结合实际电路和物理环境设计出一套完整、稳定的系统。
课程设计流程第一步:了解环境控制系统的工作原理在本次实际项目中,我们将会设计一个基于PIC单片机的自动化环境控制系统。
首先需要了解环境控制系统的工作原理。
环境控制系统的主要任务是对特定环境参数进行检测,例如:温度和湿度等。
当环境参数不满足特定的要求时,系统会自动启动或关闭相应的设备来调整环境参数。
第二步:设计电路并进行仿真在进行课程设计之前,需要先完成电路的设计,并进行仿真分析。
在设计电路时,需要将单片机作为主控芯片,将温度湿度传感器、空调和除湿机等设备与单片机进行连接。
在实际设计中,我们需要保证电路的稳定性、安全性以及结构的合理性等方面。
第三步:编写程序并上传到单片机在通过仿真操作验证了设计电路的正确性之后,接下来需要通过编写程序并上传到单片机中,以实现系统的自动化控制功能。
在编写程序时,需要注意单片机的输入输出控制、定时器和计数器的使用、存储器的管理等方面的问题。
第四步:调试与完善在将程序上传到单片机后,需要对系统进行调试,调整系统的参数以及用户界面的样式。
经过多次测试后,我们将会得到一套完整、可靠的自动化环境控制系统。
《PIC单片机》课程设计学生姓名:学号:专业班级:指导教师:二○一二年五月四日目录1、摘要 (1)2、课程设计目的 (1)3、设计题目及要求 (1)3.1设计题目: (1)3.2功能实现: (1)3.3设计要求: (1)4、课程设计内容 (2)4.1设计步骤 (2)4.2设计原理 (2)4.3模块功能说明 (2)4.4 程序流程图 (5)4.5 设计与调试分析 (5)4.6 PROTEUS仿真图 (6)5.总结 (6)5.1 遇到的问题 (6)5.2 结论 (7)1、摘要随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的自动控制系统开始进入了人们的生活,以单片机为核心的各种系统也越来越多。
同时也标志了自动控制领域成为了数字化时代的一员。
它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。
它更让人类懂得,数字时代的发展将改变人类的生活,将加快科学技术的发展。
这次设计为基于PIC16F887的智能时钟,以Microchip公司的PIC16F系列单片机为核心, TC74温度传感器、 DS1307时钟芯片以及LCD1602等构成外围电路,可以实时显示时间和温度,并可根据需要调整时间参数。
关键词:单片机,PIC16F887,TC74,DS1307,LCD1602,智能时钟2、课程设计目的本学期,我们开设了《PIC单片机》的课程。
江和老师系统的给我们介绍了Microchip 公司PIC16F877A单片机的主要参数和功能,以及MAPLAB调试软件、PICC编译器和PROTEUS仿真软件的使用,让我们受益良多!经过两个月的学习,我们已掌握基本的编程技巧,但平时的联系主要都是靠仿真实现,而实物跟仿真终究是有差别的。
因此,为了锻炼我们的实际动手能力和编程调试能力,我们开设了PIC单片机课程设计。
本课程设计是在《PIC单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC单片机的应用方法,熟练PIC单片机的C程序的编写与调试,是毕业设计前的一次重要实践,为今后走上工作岗位打下坚实的单片机应用基础。
单片机课程设计报告[5篇]第一篇:单片机课程设计报告《单片机课程设计报告》学校:专业:班级:姓名:学号:指导教师:摘要由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。
通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。
关键词单片机,程序,流水灯,数码管,温度计,键盘扫描,定时器等。
实验内容一、课程设计的目的以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。
在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。
实验一:键盘操作实验实验要求:通过本次实验实现对键盘的控制,操作数码管的显示数字。
实验程序:#include #include #include #include #define WR273 XBYTE[0XC000] #define RD244 XBYTE[0XC000] #define uchar unsigned char #define uint unsigned int sbit DQ =P1^0;uint count=0,x,buf[20],tim,flag;uchar fen,shi;uchar codetable_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80 ,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar codetable_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x0 0,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};voidled_clc(void){ XBYTE[0X8000]=0XFF;XBYTE[0X9000]=0XFF;XBYTE [0XA000]=0XFF;XBYTE[0XB000]=0XFF;}void delay(unsigned int i){ while(i--);} void delay_1ms(uint z){ uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} uchar key_test(){ WR273=0XF0;if((RD244&0X0F)!=0X0F)return 1;else return 0;}void time_init(){ TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=1;ET0=1;EA=1;} void time_display(){if(count==10000)count=0;XBYTE[0X8000]=table_16_1[coun t%10];XBYTE[0X9000]=table_16_1[count%100/10];XBYTE[0XA00 0]=table_16_1[count%1000/100];XBYTE[0XB000]=table_16_1[co unt/1000];} void TIME_SET(){ uchar a,b,c,d,key;while(flag==1){ led_clc();while(!key_test());a=keyscan();XBYTE[0XB000]=table_16_1[a];while(!key_test());b=keyscan();XBYTE[0XA000]=table_16_2[b];while(!key_test());c=keyscan();XBYTE[0X9000]=table_16_1[c];while(!key_test());d=keyscan();XBYTE[0X8000]=table_16_1[d] ;while(!key_test());key=keyscan();if(key==11){shi = a*10+b;fen = c*10+d;flag=0;} } } void TIME_DIS(){if(tim==60){ fen++;tim=0;if(fen==60){ shi++;fen=0;if(shi==24)shi=0;} } XBYTE[0X8000]=table_16_1[fen%10];XBYTE[0X9000]=table_16_1 [fen/10];XBYTE[0XA000]=table_16_2[shi%10];XBYTE[0XB000]=ta ble_16_1[shi/10];} void main(){ uint temp;led_clc();// serial_init();time_init();while(1){ temp=keyscan();if(temp==10)fla g=1;TIME_SET();//XBYTE[0X8000]=table_16_1[temp];//time_display();TIME_DIS();} } void time()interrupt 2 { uchar m;TH0=(65536-46080)/256;TL0=(65536-46080)%256;m++;if(m==20){ m=0;count++;tim++;} } void serial()interrupt 4 { if(RI==1){ x=SBUF;RI=0;} put_char(x);delay_1ms(5);}实验心得体会:通过本次实验,让我对单片机实验有了更深的了解,认为这个实验还是比较容易的,没有花太多的时间。
.目录一、课程设计目的 ............................................................................................................................. - 1 -二、设计题目及要求 ......................................................................................................................... - 1 -2.1 设计题目:.................................................................................................................................. - 1 - 2.2 功能实现:.................................................................................................................................. - 1 -2.3 设计要求:.................................................................................................................................. - 1 -三、设计原理说明 ............................................................................................................................. - 1 -3.1 时钟模块...................................................................................................................................... - 1 - 3.2 显示模块...................................................................................................................................... - 2 - 3.3 按键模块...................................................................................................................................... - 2 -3.4 温度采集模块.............................................................................................................................. - 2 -四、硬件原理图 ................................................................................................................................. - 2 -五、软件设计 ..................................................................................................................................... - 4 -六、设计总结 ................................................................................................................................... - 19 -一、课程设计目的本课程设计是在《PIC单片机原理及应用》及《单片机C语言编程》课程的基础上,通过硬件设计、软件编程及仿真调试的实践,进一步掌握PIC单片机的应用方法,熟练掌握PICC C语言程序的编写与调试,是毕业设计前的一次重要实践,为今后走上工作岗位打下坚实的单片机应用基础。
二、设计题目及要求2.1 设计题目:基于PIC16F877单片机的多功能电子时钟2.2 功能实现:实时时钟显示,时间可调;实时温度显示,并具有超限报警功能。
输出显示采用LCD1602或LED七段数码显示器。
2.3 设计要求:自己设计硬件和程序编程,画出完整的电路原理图,用Multisim或Proteus仿真,最终可实现脱机运行。
三、设计原理说明3.1 时钟模块DS1307是美国DALLAS公司推出的I2C总线接口实时时钟芯片,它可独立于CPU 工作,不受CPU主晶振及其电容的影响,且计时准确,月累积误差一般小于10秒。
芯片还具有主电源掉电情况下的时钟保护电路,DS1307的时钟靠后备电池维持工作,拒绝CPU对其读出和写入访问。
同时还具有备用电源自动切换控制电路,因而可在主电源掉电和其它一些恶劣环境场合中保证系统时钟的定时准确性。
DS1307具有产生秒、分、时、日、月、年等功能,且具有闰年自动调整功能。
同时,DS1307芯片部还集成有一定容量、具有掉电保护特性的静态RAM,可用于保存一些关键数据。
3.2 显示模块如用LCD1602作为显示设备,要求显示屏分两行显示,第一行显示日期(年-月-日)和星期,第二行显示时间(时:分:秒)和温度。
显示秒由00一直加到59,分钟数也由00加到59,小时采用24小时制,由00加到23,如此循环显示。
3.3 按键模块按键用来作为时间调整。
要求至少设计4个按键,按键1作为设置键;按键2、按键3分别为增加、减少键,在设置键按下时,此两个按键方有效;按键4是确定键,在设置键按下时方才有效。
3.4 温度采集模块DS18B20是美国DALLAS公司推出的单总线数字温度传感器。
DS18B20部集成了温敏元件、数据转换芯片、存储器芯片和计算机接口芯片等多功能模块。
其主要技术特点有:具有独特的单线接口方式;可以通过数据线供电,具有超低功耗工作方式;测温围为-55℃~125℃,测温精度为0.5℃;温度转换精度9~12位可编程,直接将温度转换值以二进制数码的方式串行输出。
四、硬件原理图(含原理图、电路仿真图)时间显示:按下温度键temp后显示温度:五、软件设计(含流程图、带注释的程序清单)#include <pic.h>#include<string.h>#include<stdio.h>#define _XTAL_FREQ 1000000UL#define speak RC3#define ON 0#define OFF 1#define DQ RB5//设置数据方向#define DQ_IN() TRISB5 = 1 //输入#define DQ_OUT() TRISB5 =0 //输出//DS1302引脚定义#define IO RA1#define SCLK RA0#define RST RA2//DS1302端口数据读写方向#define SET_IO_RD() TRISA1 = 1#define SET_IO_WR() TRISA1 = 0#define LCD_CLS 0x01#define LCD_HOME 0x02#define LCD_SETMODE 0x04#define LCD_SETVISIBLE 0x08#define LCD_SHIFT 0x10#define LCD_SETFUNCTION 0x20#define LCD_SETCGADDR 0x40#define LCD_SETDDADDR 0x80#define PORT_LCD_DAT PORTD#define PORT_LCD_CTL PORTC#define TRIS_LCD_DAT TRISD#define TRIS_LCD_CTL TRISC#define RS RC5#define RW RC6#define E RC7extern unsigned char DateTime[];extern char WEEK[][4]= {"SUN","MON","TUS","WEN","THU","FRI","SAT"}; //0,1,2,3,4,5,6分别对应周日,周一至周六//所读取的日期时间(秒,分,时,日,月,星期,年)unsigned int temper;unsigned int settempe = 570 ;unsigned char DateTime [7];unsigned char tmp[]="0000";//向DS1302写入一个字节unsigned char RB1_FLAG = 0;const unsigned char tone[]={108,102,91,86,77,68,61,57};//发声的频率常数void delay18us(unsigned char x) //18us,每次加1,增加9us{unsigned char i;for(;x>0;x--){for(i=0;i<1;i++);}}void delay1ms(unsigned int x){unsigned char i;for(;x>0;x--)for(i=0;i<165;i++);}void write_byte_to_DS1302(unsigned char x){unsigned char i; SET_IO_WR();for(i=0x01; i !=0x00; i <<= 1){if (x & i) IO = 1; else IO =0;SCLK = 0; SCLK =1; __delay_us(10);}}//从DS1302读取1字节unsigned char get_byte_form_DS1302(){unsigned char i,dat =0x00; SET_IO_RD();for(i = 0; i < 8; i++){SCLK = 1; SCLK=0;if(IO) dat |= (0x01<<i); __delay_us(10);}return (dat>>4)*10 + (dat&0x0F);}//从DS1302指定位置读数据unsigned char read_data(unsigned char addr){unsigned char dat;RST = 1;write_byte_to_DS1302(addr);dat = get_byte_form_DS1302();RST = 0;return dat;}//向DS1302指定地址写数据void Write_DS1302(unsigned char addr,unsigned char dat){RST = 1;write_byte_to_DS1302(addr);write_byte_to_DS1302(dat);RST = 0;}void port_init(){ADCON1 = 0X06; //RA设置为普通IO口TRISA = 0X00; //端口A设置为输出OPTION = 0X00; //端口B弱上拉使能TRISB = 0xFF;PORTC = 0X00;TRISC = 0X00; //端口C设置为输出PORTD = 0X00;TRISD = 0X00; //端口D设置为输出speak=0;}void song(unsigned char x){unsigned char i,j;for(i=0;i<60;i++){for(j=0;j<3;j++){speak = 1;delay18us(tone[x]);speak = 0; //翻转发声delay18us(tone[x]);}}}void keyscan(){unsigned char a ,b ;DateTime[0]=0;Write_DS1302(0x8E,0x00); //Write_DS1302(0x80,0x80); //if(RB2==0) //小时+1{DateTime[2] = DateTime[2]+1; //第三个元素小时+1if(DateTime[2] == 24) DateTime[2]= 0;//当变为24H时,小时位归零a = DateTime[2]/10*16+DateTime[2]%10; //变成16进制数据Write_DS1302(0x84,a);}if(RB3==0){DateTime[1] = DateTime[1]+1; //第二个元素分钟+1if(DateTime[1] == 60) DateTime[1]= 0;//当变为60min时,小时位归零b = DateTime[1]/10*16+DateTime[1]%10; //变成16进制数据Write_DS1302(0x82,b);}if(RB4==0){song(3);while(RB4 == ON);Write_DS1302(0x80,0x00); // 调整完毕后启动时钟运行Write_DS1302(0x8E,0x00); // 禁止写RB1_FLAG = 0; // 将RB1按下后产生的标志清除}}//DS1302初始化void init_DS1302(){unsigned char second_REG;second_REG = read_data(0x81); //读取秒寄存器当前值//如果高位CH为1,则表示当前DS1302振荡器出于待机状态//这时需要将CH(clock halt flag)位设为0,打开振荡器使时钟运行if ((second_REG & 0x80) == 0x80){Write_DS1302(0x8E,0x00) ; //写控制字节,取消写保护Write_DS1302(0x80,second_REG & 0x7F) ; //0x80地址不变,设高位CH=0 Write_DS1302(0x8E,0x80) ; //加保护}}//读取当前日期void getDateTime(){//Write_DS1302(0x8E,0x00); //允许写操作unsigned char i, addr = 0x81;for (i=0; i<7; i++){DateTime[i] = read_data(addr);addr +=2;}}//********LCD显示子函数***********************////**********结束LCD子函数********************//void LCD_BUSY_WAIT() //忙等待{unsigned char status;TRIS_LCD_DAT = 0xFF;RS = 0; RW = 1;do{E =1; NOP();status = PORT_LCD_DAT;E = 0;}while (status & 0x80);}void Write_LCD_Command(unsigned char cmd) //写LCD命令{TRIS_LCD_DAT = 0x00;PORT_LCD_DAT = cmd;PORT_LCD_CTL = TRIS_LCD_CTL = 0x00;RS = 0;RW = 0;E = 1 ;E = 0 ;LCD_BUSY_WAIT();}void Write_LCD_Data(unsigned char dat) //写LCD寄存器数据{TRIS_LCD_DAT = 0x00;PORT_LCD_DAT = dat;RS = 1;RW = 0;E = 1 ;NOP();E = 0;LCD_BUSY_WAIT();}void LCD_Initialize(){Write_LCD_Command(0x38);__delay_ms(2);Write_LCD_Command(0x01);__delay_ms(2);Write_LCD_Command(0x06);__delay_ms(2);Write_LCD_Command(0x0C);__delay_ms(2);}void LCD_ShowString(unsigned char r, unsigned char c, char *str) {unsigned char i = 0;if(r == 0) Write_LCD_Command(0x80 | c);if(r == 1) Write_LCD_Command(0xC0 | c);for (i = 0; i < 16 && str[i]!= '\0'; i++)Write_LCD_Data(str[i]);}void display_str(unsigned char line,unsigned char location,unsigned char str)//line行,location列,str字符{RS=0;RW=0;E=1;delay1ms(1);if (line==0) //line=0,第一行PORT_LCD_DAT=0x80+location;if (line==1) //line=1,第二行PORT_LCD_DAT=0xC0+location;E=0;LCD_BUSY_WAIT() ;Write_LCD_Data(str);}void Set_LCD_POS(unsigned char r,unsigned char c) //设置显示起始位置{if(r == 0) Write_LCD_Command(0x80 | c); elseif(r == 1) Write_LCD_Command(0xC0 | c);}//********18B20子程序********////包括函数:void Wait_18B20();////void delay15us(unsigned int x) //x必须大于0{{x--;}while(x);}void reset(){unsigned char state_DQ=1;while(state_DQ){DQ_OUT();delay15us(64); //延时721usDQ_IN();delay15us(5); //延时61usif (DQ)state_DQ=1; //若DS18B20无应答,循环检查elsestate_DQ=0; //检测到DS18B20应答低电平信号delay15us(43); //延时490us}}void write_one_byte(unsigned char data){unsigned char i,tmp;for(i=0;i<8;i++){tmp=data&0x01;data>>=1;if (tmp) //tmp=1时{DQ_OUT();NOP();NOP();DQ_IN();delay15us(5); //延时61us }else{DQ_OUT();delay15us(5); //延时61usDQ_IN();NOP();NOP();}}}unsigned char read_one_byte(){unsigned char i,data;for(i=0;i<8;i++){data>>=1;DQ_OUT();NOP();DQ_IN();NOP();NOP();if (DQ==1)data=data|0x80;delay15us(5); //延时61us }return(data);}unsigned int get_temperature(){unsigned char tmpA,tmpB; //定义读出RAM的高低位变量reset();write_one_byte(0xcc); //写跳过ROM命令,因为总线上只有一个DS18B20 write_one_byte(0x44); //启动DS18B20温度转换命令delay1ms(800);reset(); //如果再写命令必须再次复位write_one_byte(0xcc); //写跳过ROM命令,因为总线上只有一个DS18B20 write_one_byte(0xbe); //读部RAM中9字节的容命令tmpA=read_one_byte(); //读部RAM 低八位温度tmpB=read_one_byte(); //读部RAM 高八位温度temper=tmpB*256+tmpA;return(temper);}void temp (){unsigned char tmpB,tmpA;unsigned int results;display_str(1,10,tmp[0]); //在指定位置显示百位/负号display_str(1,11,tmp[1]); //在指定位置显示十位display_str(1,12,tmp[2]); //在指定位置显示个位display_str(1,13,'.'); //在指定位置显示小数点位display_str(1,14,tmp[3]); //在指定位置显示十分位位display_str(1,15,0XDF); //在指定位置显示°display_str(1,16,'C'); //在指定位置显示Cdelay1ms(200); //tmp[21]... 22 23 25results=get_temperature();if(results>=0x1000){results=results^0xFFFF;results++;tmpB=results/256;tmpA=(unsigned char)results;results>>=4;tmp[0]=0x2D; //负号}else{tmpB=results/256; //高八位tmpA=(unsigned char)results; //低八位results>>=4;tmp[0]=results/100+0x30; //百}tmp[1]=results/10%10+0x30; //十tmp[2]=results%10+0x30; //个tmpA<<=4;tmpA>>=4;results=625*tmpA;tmp[3]=results/1000+0x30;//if (results>40)//speak = 0;//song(0);}char LCD_disp_buff[17];void pro_key_scan(){if(RB1 == 1){getDateTime();}if(RB1== 0){song(0);while(RB1 == ON);__delay_ms(10);//if(RB1==0)//{while(! RB1);RB1_FLAG = 1;//}}if (RB1_FLAG == 1) keyscan();}void Screen(){sprintf(LCD_disp_buff,"%02d-%02d-%02d %3s",DateTime[6],DateTime[4],DateTime[3],WEEK[DateTime[5]-1]);LCD_ShowString(0,0,LCD_disp_buff);sprintf(LCD_disp_buff,"%02d:%02d:%02d ",DateTime[2], DateTime[1],DateTime[0]);LCD_ShowString(1,0,LCD_disp_buff);__delay_ms(100);}void compare(){if(temper > settempe ) //当温度超过35.7度,蜂鸣器便会报警。