(OK)09-10(2)单片机教学日历

合集下载

单片机课程设计万年历

单片机课程设计万年历

项目一万年历一、任务目的通过对万年历的设计和制作,应用了单片机的数码管、键盘接口技术,以及定时/计数器、中断等程序设计技术,进一步训练了单片机并行I/O端口的应用能力、循环程序设计、键盘查询程序设计和调试能力,让同学们初步了解了作为单片机的重要输入设备——键盘接口技术和程序设计方法。

二、设计要求用单片机设计一个在数码管能同时显示年月日时分秒,具体要求:根据提供的单片机,设计出万年历的硬件电路,编写软件,用Proteus进行仿真实验,然后进行实物的软硬件调试,并撰写符合要求的实训报告。

三、系统硬件电路设计可分为最小系统、数码管显示、按键三个单元电路,要求画出各部分电路图,写出工作原理。

最小系统:数码管显示:按键:四、软件设计主流程图:流程图:软件设计有三部分:计时(区分大小月与平月)、显示、校时(使用按键)。

#include <reg51.h>unsigned char msec,sec,min,hou,day=20,mon=3,ci;/*定义msec为50ms计数变量,sec为秒变量,min为分变量,hou为时变量,day 为天变量,mon为月变量,ci为循环次数*/int year=2013;/*定义year为年变量,定义起始年为2013年*/sbit P30=P3^0;/*通过sbit定义可位寻址变量*/sbit P32=P3^2;sbit P33=P3^3;sbit P34=P3^4;void delay(unsigned char i)/*延时函数,当i=1时,延时255微秒*/ { unsigned char j,k;for(k=0;k<i;k++)for(j=0;j<255;j++);}//函数名:T0_INT//函数功能:定时器0中断函数,50ms定时时间到,自动执行该函数,判断是否中断20次//形式参数:无//返回值:无void T0_INT() interrupt 1//定时器0中断类型号为1{TH0=0x3c; //50ms定时初值TL0=0xb0;msec++; //中断次数增1if(msec==20) //中断次数为20次么?{msec=0; //是,1s计时到,50ms计数变量清零sec++; //秒变量加1if(sec==60) //到60s么?{sec=0; //是,1分计时到,秒变量清零min++; //分变量加1if(min==60) //到60分么?{ min=0; //是,1小时计时到,分变量清零hou++; //时变量加1if(hou==24) //到24时么?{ hou=0; //是,1天计时到,时变量清零day++; //天变量加1if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12) //月是为1,3,5,7,8,10,12么?{if(day==32){day=1;mon++;} } //是,天到32么?是,天变量复位为1,月变量加1else if( mon==2) //月是为2么?{if(day==29){day=1;mon++;}} //是,天到29么?是,天变量复位为1,月变量加1else //月是为4,6,9,11么?{if(day==31){day=1;mon++;}} //是,天到31么?是,天变量复位为1,月变量加1if(mon==13) //月到13么?{ mon=1; //是,1年计时到,月变量复位到1year++;}}}}}} //年变量加1void main() //主函数{unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0 x6f};//定义数字0~9字型显示码,数码管共阴TMOD=0x01; //定时器0工作方式1TR0=1; //启动定时器TH0=0x3c; //50ms定时初值TL0=0xb0;EA=1; //开总中断ET0=1; //定时器0中断while(1){if(P30==1) //P3.0=1么?(开关是开启的么?){ for(ci=1;ci<=10;ci++) //for循环,ci的初值为1,判断ci<=10,若小于等于10循环,ci+1,若大于10跳出循环{P2=0x00;P0=led[sec%10];delay(2); //选中P2为0x00时控制的数码管,显示秒个位P2=0x01;P0=led[sec/10];delay(2); //选中P2为0x01时控制的数码管,显示秒十位P2=0x02;P0=led[min%10];delay(2); //选中P2为0x02时控制的数码管,显示分个位P2=0x03;P0=led[min/10];delay(2); //选中P2为0x03时控制的数码管,显示分十位P2=0x04;P0=led[hou%10];delay(2); //选中P2为0x04时控制的数码管,显示时个位P2=0x05;P0=led[hou/10];delay(2);} //选中P2为0x05时控制的数码管,显示时十位if(P32==0) //P3.2=0么?按钮按下么?{delay(55);if(P32==0) {sec++;}if(sec==60) {sec=0;}} //是,延时55*255um;P3.2=0么?是,秒变量加1;秒到60么?是,秒变量清零if(P33==0) //P3.3=0么?按钮按下么?{delay(55);if(P33==0) {min++;}if(min==60) {min=0;}} //是,延时55*255um;P3.3=0么?是,分变量加1;分到60么?是,分变量清零if(P34==0) //P3.4=0么?按钮按下么?{delay(55);if(P34==0) {hou++;}if(hou==24) {hou=0;}}} //是,延时55*255um;P3.4=0么?是,时变量加1;时到24么?是,时变量清零else if(P30==0) //P3.0=0么?(开关是闭合的么?){for(ci=1;ci<=10;ci++) //for循环,ci的初值为1,判断ci<=10,若小于等于10循环,ci+1,若大于10跳出循环{P2=0x00;P0=led[day%10];delay(2); //选中P2为0x00时控制的数码管,显示天个位P2=0x01;P0=led[day/10];delay(2); //选中P2为0x01时控制的数码管,显示天十位P2=0x02;P0=led[mon%10];delay(2); //选中P2为0x02时控制的数码管,显示月个位P2=0x03;P0=led[mon/10];delay(2); //选中P2为0x03时控制的数码管,显示月十位P2=0x04;P0=led[year%10];delay(2); //选中P2为0x04时控制的数码管,显示年个位P2=0x05;P0=led[year/10%10];delay(2); //选中P2为0x05时控制的数码管,显示年十位P2=0x06;P0=led[year/100%10];delay(2); //选中P2为0x06时控制的数码管,显示年百位P2=0x07;P0=led[year/1000];delay(2);} //选中P2为0x07时控制的数码管,显示年千位if(P32==0) //P3.2=0么?按钮按下么?{delay(50);if(P32==0){day++;}if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10|| mon==12) //是,延时50*255um;P3.2=0么?是,天变量加1;月是为1,3,5,7,8,10,12么?{if(day==32){day=1;} } //是,天到32么?是,天变量复位为1else if( mon==2) //月是为2么?{if(day==29){day=1;}} //是,天到29么?是,天变量复位为1else //月是为4,6,9,11么?{if(day==31){day=1;}}} //是,天到31么?是,天变量复位为1if(P33==0) //P3.3=0么?按钮按下么?{delay(50);if(P33==0) {mon++;}if(mon==13) {mon=1;}} //是,延时50*255um;P3.3=0么?是,月变量加1;月到13么?是,月变量复位为1if(P34==0) //P3.4=0么?按钮按下么?{delay(50);if(P34==0) {year++;}}} //是,延时50*255um;P3.3=0么?是,年变量加1;else {;}}}五、系统调试画proteus图,了解单片机最小系统,选用的元件有AT89C51,共阴的蓝色的8位数码管(7SEG-MPX8-CC-BLUE),三八译码器(74HC138),按钮(BUTTON),普通电容(CAP),极性电容(CAP-ELEC),晶体管(CRYSTAL),10K电阻(RES),排阻(RESPACK-8),单刀单匝开关(SWITCH),将电路连接完整。

《单片机技术》教学日历

《单片机技术》教学日历
3.1.2.1IO口驱动LED电路
3.1.2.2 吸电流与拉电流的区别
3.1.2.3 IO口线的驱动能力
PPT、视频、动画
搭建实验电路,观察并总结吸电流和拉电流方式的区别
4、5
4
项目三 小灯的点亮
任务3.2单片机控制流水灯
3.1.1设计单灯闪烁电路
3.1.1.1单灯驱动电路设计与搭建
3.1.1.2单灯闪烁程序设计与调试
任务7.2 时钟的实现
7.2.1 时钟的实现
7.2.1.11秒定时的实现原理
7.2.1.2 秒、分、小时的实现方法
7.2.1.3数码管显示设计
7.2.1.4增加按键设置功能
PPT、动画
完善时钟设计
12
6
项目八交通信号灯
任务8.1 实现简易交通信号灯控制逻辑
8.1.1硬件电路设计
8.1.1.1 以发光二极管代替信号灯设计电路
4.1.2.3 编写键控彩灯程序
PPT、动画
按键驱动程序
7
4
项目五中断键控彩灯
任务5.1 使用外部中断实现对彩灯的控制
5.1.1外部中断概念
5.1.1.1 外部中断源及触发
5.1.1.2中断相关寄存器
5.1.1.3 外部中断源的电路搭建
5.1.2 外部中断函数编写
5.1.2.1 中断服务函数的概念
5.1.2.2声明中断函数的关键字
6.1.2.1 共阴极数码管的编码方案
6.1.2.2共阳极数码管的编码方案
6.1.3 驱动静态数码管
6.1.3.1 搭建静态数码管电路
6.1.3.2 编写程序驱动静态数码管显示0~9
PPT、动画
数码管静态显示电路和程序

单片机课程设计-电子日历

单片机课程设计-电子日历

湖南科技大学信息与电气工程学院《课程设计报告》题目:电子日历专业:通信工程班级: 3班姓名:黄夏妮学号: 1304040322指导教师:陈君2016年 6 月 16 日单片机原理与应用课程设计评阅书信息与电气工程学院课程设计任务书2015—2016学年第二学期专业:通信工程班级: 3班学号: 1304040322 姓名:黄夏妮课程设计名称:单电片机原理与应用设计题目:电子日历完成期限:自 2016 年 6 月 6 日至 2016 年 6 月 17 日共 2 周设计依据、要求及主要内容(可另加附页):设计依据:本方案以STC15F2K60S2单片机作为主控核心,与时钟芯片、LED显示、按键等模块组成硬件系统,通过《单片机原理与应用》这门课的课程设计,学生应能对STC15系列单片机有一个全面的认识,掌握以STC15系列单片机为核心的电子电路的设计方法和应用技术。

设计要求:(1)利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。

(2)利用LED分别显示当前时间和日历。

(3)利用尽可能少的开关实现:校正日历和时间(4)定制闹钟(时、分、表)设计内容:该课程设计是利用STC15F2K60S2单片机内容的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。

设计的电子时钟通过数码管显示,并通过按键实现时间和暂停、启动控制等。

我们选择的方法是单片机开发设计使用的传统方法,通过本次设计,可以了解整个单片机开发的流程。

文章首先介绍了单片机的基本知识,然后同时给出了框图,流程图等。

论文涵盖了从系统设计,编程,原理图等产品开发的基本过程。

指导教师(签字):批准日期:年月日摘要本设计是根据我们所学的单片机课程,按照大纲要求利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。

随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类对时钟进行不断研究,不断创新纪录。

单片机课设 电子万年历

单片机课设 电子万年历

《单片机原理及应用》课程设计题目:万年历设计姓名:学号:系别:专业:年级:2008起讫日期:2010.11.22 ~2010.12.3指导教师:职称:目录1.设计概述 (1)2.硬件电路图 (3)3.软件设计 (5)3.1流程图 (5)3.2程序 (7)4. 结论4.1测试结果 (12)4.2遇到问题 (12)5.3如何解决 (12)5.参考文献 (13)附录:电路图 (15)组员分工 (14)1、设计概述单片机就是微控制器,是面向应用对象设计、突出控制功能的芯片。

单片机接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统。

将它嵌入到形形色色的应用系统中,就构成了众多产品、设备的智能化核心。

本设计就是应用单片机强大的控制功能制作而成的电子万年历,该电子万年历包括三大功能:实时显示年、月、日、时、分、秒、周期。

本设计采用的是AT89S52单片机,该单片机采用的MCU51内核,因此具有很好的兼容性,内部带有8KB的ROM,能够存储大量的程序。

计时芯片采用DALLAS公司的涓细充电时钟芯片DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时分、秒信息。

显示器件采用通用型1602液晶,可显示32个字符,如果使用数码管来做显示器件需消耗大量的系统资源,因此采用低功耗的1602液晶,该液晶显示方便,功能强大,完全能满足数字万年历的显示要求。

综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;LCD液晶显示屏作为显示。

通过此次设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。

2、硬件电路图1.时钟芯片2.LCD1602液晶显示屏3.单片机芯片C523、软件设计3.1流程图主程序流程图3.2程序#include <REG51.H>#include <intrins.h>//#include "LCD1602.h"//#include "DS1302.h"#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P1^7; //实时时钟时钟线引脚sbit DS1302_IO = P1^6; //实时时钟数据线引脚sbit DS1302_RST = P1^5; //实时时钟复位线引脚sbit ACC0 = ACC^0;sbit ACC7 = ACC^7;charhide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数sbit Set = P2^0; //模式切换键sbit Up = P2^1; //加法按钮sbit Down = P2^2; //减法按钮sbit out = P2^3; //立刻跳出调整模式按钮char done,count,temp,flag,up_flag,down_flag;uchar TempBuffer[5],week_value[2];void show_time(); //液晶显示程序/***********1602液晶显示部分子程序****************///PortDefinitions********************************************************** sbit LcdRs = P2^5;sbit LcdRw = P2^6;sbit LcdEn = P2^7;sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数//******************************************************************* *******unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_(); LcdEn=0;return DBPort;}//向LCD写入命令或数据//************************************************************#define LCD_COMMAND 0 // Command#define LCD_DATA 1 // Data#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input;_nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************************************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode); }//设置输入模式************************************************************#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 // default#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00 //defaultvoid LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND, 0x04|InputMode);}//初始化LCD************************************************************void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动}//液晶字符输入的位置************************void GotoXY(unsigned char x, unsigned char y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示void Print(unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}/***********DS1302时钟部分子程序******************/typedef struct __SYSTEMTIME__{unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString[11];unsigned char TimeString[9];}SYSTEMTIME; //定义的时间类型SYSTEMTIME CurrentTime;#define AM(X) X#define PM(X) (X+12) // 转成24小时制#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84#define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8Cvoid DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数) { unsigned char i;ACC = d; for(i=8; i>0; i--){DS1302_IO = ACC0; //相当于汇编中的 RRCDS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; } }unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数) { unsigned char i; for(i=8; i>0; i--){ ACC = ACC >>1; //相当于汇编中的 RRCACC7 = DS1302_IO; DS1302_CLK = 1;DS1302_CLK = 0; }return(ACC); }void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据{ DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); // 地址,命令DS1302InputByte(ucDa); // 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0;} unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据{ unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); // 地址,命令ucData = DS1302OutputByte(); // 读1Byte数据DS1302_CLK = 1;DS1302_RST = 0;return(ucData);}void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组{unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); } void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]{ if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为 2007/07/22{ Time->DateString[0] = '2';Time->DateString[1] = '0';Time->DateString[2] = Time->Year/10 + '0';Time->DateString[3] = Time->Year%10 + '0';}else{ Time->DateString[0] = ' '; Time->DateString[1] = ' ';Time->DateString[2] = ' '; Time->DateString[3] = ' ';}Time->DateString[4] = '/';if(hide_month<2){Time->DateString[5] = Time->Month/10 + '0';Time->DateString[6] = Time->Month%10 + '0';}else{ Time->DateString[5] = ' '; Time->DateString[6] = ' ';}Time->DateString[7] = '/';if(hide_day<2){Time->DateString[8] = Time->Day/10 + '0';Time->DateString[9] = Time->Day%10 + '0';}else{Time->DateString[8] = ' ';Time->DateString[9] = ' '; } if(hide_week<2){week_value[0] = Time->Week%10 + '0'; } //星期的数据另外放到week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示} else { week_value[0] = ' ';}week_value[1] = '\0';Time->DateString[10] = '\0'; //字符串末尾加 '\0' ,判断结束字符}void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组 TimeString[];{ if(hide_hour<2){ Time->TimeString[0] = Time->Hour/10 + '0';Time->TimeString[1] = Time->Hour%10 + '0';}else{ Time->TimeString[0] = ' ';Time->TimeString[1] = ' ';}Time->TimeString[2] = ':';if(hide_min<2){ Time->TimeString[3] = Time->Minute/10 + '0';Time->TimeString[4] = Time->Minute%10 + '0';}else {Time->TimeString[3] = ' ';Time->TimeString[4] = ' '; }Time->TimeString[5] = ':';if(hide_sec<2){Time->TimeString[6] = Time->Second/10 + '0';Time->TimeString[7] = Time->Second%10 + '0';}else{Time->TimeString[6] = ' ';Time->TimeString[7] = ' '; } Time->DateString[8] = '\0';}void Initial_DS1302(void) //时钟芯片初始化{ unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) //判断时钟芯片是否关闭{Write1302(0x8e,0x00); //写入允许Write1302(0x8c,0x07); //以下写入初始化时间日期:07/07/25.星期: 3.时间: 23:59:55Write1302(0x88,0x07);Write1302(0x86,0x25);Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);Write1302(0x80,0x55);Write1302(0x8e,0x80); //禁止写入}}void Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}/*延时子程序*/void mdelay(uint delay){ uint i;for(;delay>0;delay--){for(i=0;i<62;i++) //1ms延时. {;}}}void outkey() //跳出调整模式,返回默认显示{ uchar Second;if(out==0) { mdelay(8); count=0;hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_mon th=0,hide_year=0;Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); //写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); //禁止写入done=0; while(out==0); }}///////////////////////////////////////////////////////////////////// //////////void Upkey()//升序按键{ Up=1;if(Up==0){mdelay(8);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp+1; //秒数加1up_flag=1; //数据调整后更新标志if((temp&0x7f)>0x59) //超过59秒,清零temp=0; break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp+1; //分数加1up_flag=1;if(temp>0x59) //超过59分,清零temp=0;break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp+1; //小时数加1up_flag=1;if(temp>0x23) //超过23小时,清零temp=0; break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp+1; //星期数加1up_flag=1;if(temp>0x7)temp=1;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp+1; //日数加1up_flag=1;if(temp>0x31)temp=1;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp+1; //月数加1up_flag=1;if(temp>0x12)temp=1;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp+1; //年数加1up_flag=1;if(temp>0x85)temp=0;break;default:break;}while(Up==0); }}///////////////////////////////////////////////////////////////////// //////////void Downkey()//降序按键{ Down=1;if(Down==0){ mdelay(8);switch(count){case 1:temp=Read1302(DS1302_SECOND); //读取秒数temp=temp-1; //秒数减1down_flag=1; //数据调整后更新标志if(temp==0x7f) //小于0秒,返回59秒temp=0x59;break;case 2:temp=Read1302(DS1302_MINUTE); //读取分数temp=temp-1; //分数减1down_flag=1;if(temp==-1)temp=0x59; //小于0秒,返回59秒break;case 3:temp=Read1302(DS1302_HOUR); //读取小时数temp=temp-1; //小时数减1down_flag=1;if(temp==-1)temp=0x23;break;case 4:temp=Read1302(DS1302_WEEK); //读取星期数temp=temp-1; //星期数减1down_flag=1;if(temp==0)temp=0x7;;break;case 5:temp=Read1302(DS1302_DAY); //读取日数temp=temp-1; //日数减1down_flag=1;if(temp==0)temp=31;break;case 6:temp=Read1302(DS1302_MONTH); //读取月数temp=temp-1; //月数减1down_flag=1;if(temp==0)temp=12;break;case 7:temp=Read1302(DS1302_YEAR); //读取年数temp=temp-1; //年数减1down_flag=1;if(temp==-1)temp=0x85;break;default:break;}while(Down==0); }}void Setkey()//模式选择按键{Set=1;if(Set==0){ mdelay(8); count=count+1; //Setkey按一次,count就加1 done=1; //进入调整模式while(Set==0); }}void keydone()//按键功能执行{ uchar Second;if(flag==0) //关闭时钟,停止计时{ Write1302(0x8e,0x00); //写入允许temp=Read1302(0x80);Write1302(0x80,temp|0x80);Write1302(0x8e,0x80); //禁止写入flag=1; }Setkey(); //扫描模式切换按键 switch(count){case 1:do //count=1,调整秒{ outkey(); //扫描跳出按钮Upkey(); //扫描加按钮Downkey(); //扫描减按钮if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据{Write1302(0x8e,0x00); //写入允许Write1302(0x80,temp|0x80); //写入新的秒数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_sec++; //位闪计数if(hide_sec>3)hide_sec=0;show_time(); //液晶显示数据}while(count==2);break;case 2:do //count=2,调整分{ hide_sec=0;outkey();Upkey();Downkey();if(temp>0x60)temp=0;if(up_flag==1||down_flag==1){ Write1302(0x8e,0x00); //写入允许Write1302(0x82,temp); //写入新的分数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_min++;if(hide_min>3)hide_min=0;show_time();}while(count==3);break;case 3:do //count=3,调整小时{ hide_min=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){ Write1302(0x8e,0x00); //写入允许Write1302(0x84,temp); //写入新的小时数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_hour++;if(hide_hour>3)hide_hour=0;show_time();}while(count==4);break;case 4:do //count=4,调整星期{ hide_hour=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){ Write1302(0x8e,0x00); //写入允许Write1302(0x8a,temp); //写入新的星期数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0;}hide_week++;if(hide_week>3)hide_week=0;show_time();}while(count==5);break;case 5:do //count=5,调整日{hide_week=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){Write1302(0x8e,0x00); //写入允许Write1302(0x86,temp); //写入新的日数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_day++;if(hide_day>3)hide_day=0;show_time();}while(count==6);break;case 6:do //count=6,调整月{ hide_day=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){ Write1302(0x8e,0x00); //写入允许Write1302(0x88,temp); //写入新的月数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_month++;if(hide_month>3)hide_month=0;show_time();}while(count==7);break;case 7:do //count=7,调整年{ hide_month=0;outkey();Upkey();Downkey();if(up_flag==1||down_flag==1){ Write1302(0x8e,0x00); //写入允许Write1302(0x8c,temp); //写入新的年数Write1302(0x8e,0x80); //禁止写入up_flag=0;down_flag=0; }hide_year++;if(hide_year>3)hide_year=0;show_time();}while(count==8);break;case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态Second=Read1302(DS1302_SECOND);Write1302(0x8e,0x00); //写入允许Write1302(0x80,Second&0x7f);Write1302(0x8E,0x80); //禁止写入done=0;break; //count=7,开启中断,标志位置0并退出default:break; }}void show_time() //液晶显示程序{ DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据TimeToStr(&CurrentTime); //时间数据转换液晶字符DateToStr(&CurrentTime); //日期数据转换液晶字符GotoXY(0,1);Print(CurrentTime.TimeString); //显示时间GotoXY(0,0);Print(CurrentTime.DateString); //显示日期GotoXY(15,0);Print(week_value); //显示星期GotoXY(11,0);Print("Week"); //在液晶上显示字母 weekDelay1ms(400); //扫描延时}void main(){ flag=1; //时钟停止标志LCD_Initial(); //液晶初始化Initial_DS1302(); //时钟芯片初始化up_flag=0;down_flag=0;done=0; //进入默认液晶显示while(1){ while(done==1) keydone(); //进入调整模式while(done==0){ show_time(); //液晶显示数据flag=0; Setkey(); //扫描各功能键}}}4、结论4.1测试结果经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。

单片机简易日历课程设计

单片机简易日历课程设计

单片机简易日历课程设计一、课程目标知识目标:1. 理解单片机的基础知识,掌握其内部结构和功能;2. 学习简易日历的原理,了解日期、时间与单片机编程的关系;3. 掌握C语言编程基础,运用其进行单片机程序设计。

技能目标:1. 能够独立完成单片机的硬件连接,进行基本的程序下载与调试;2. 运用C语言编写简易日历程序,实现日期、时间的显示与修改;3. 培养学生动手实践能力,提高问题分析及解决能力。

情感态度价值观目标:1. 培养学生对单片机编程的兴趣,激发创新意识;2. 培养学生的团队协作精神,提高沟通与交流能力;3. 培养学生严谨、细心的学习态度,养成良好的编程习惯。

分析课程性质、学生特点和教学要求,本课程旨在通过单片机简易日历的设计与实现,让学生掌握单片机基础知识、编程技能,并培养其团队协作和创新能力。

课程目标具体、可衡量,便于教学设计和评估。

通过本课程的学习,学生将能够独立完成单片机程序的编写与调试,为后续相关课程打下坚实基础。

二、教学内容1. 单片机基础知识:介绍单片机的内部结构、工作原理及功能,涉及教材第1章内容;- 单片机硬件结构及引脚功能;- 单片机工作原理及指令系统。

2. C语言编程基础:学习C语言基础知识,掌握基本语法,为单片机编程打下基础,涉及教材第2章内容;- 数据类型、变量与常量;- 运算符、表达式及语句;- 控制结构(顺序、选择、循环)。

3. 简易日历原理:学习日期、时间的计算方法,了解日历程序设计思路,涉及教材第3章内容;- 日期、时间的基本概念;- 日历程序设计思路及算法。

4. 单片机程序设计:结合C语言,学习单片机程序编写与调试,实现简易日历功能,涉及教材第4章内容;- 单片机程序框架及编程规范;- 简易日历程序的编写与调试;- 硬件连接及程序下载。

5. 实践操作:安排学生进行单片机简易日历的实践操作,巩固所学知识,涉及教材第5章内容;- 硬件连接与程序下载;- 程序调试与优化;- 团队合作、沟通交流。

单片机万年历课程设计

单片机万年历课程设计

单片机万年历课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和万年历的功能需求。

2. 使学生掌握单片机编程的基本语法和逻辑结构。

3. 帮助学生掌握如何在单片机上实现日期、时间的计算与显示。

技能目标:1. 培养学生运用单片机进行项目设计的能力,特别是万年历的实际应用。

2. 培养学生独立编程和调试程序的能力,解决实际项目中遇到的问题。

3. 提高学生团队协作能力和项目管理的意识。

情感态度价值观目标:1. 培养学生对单片机及电子制作的兴趣,激发学生的创新意识和探索精神。

2. 增强学生面对困难的勇气和毅力,培养他们积极解决问题的态度。

3. 通过团队合作,培养学生的集体荣誉感和责任感。

课程性质:本课程为实践性强的设计与制作课程,以单片机技术为核心,结合编程和电子技术,实现万年历的制作。

学生特点:学生为高年级学生,已具备一定的单片机基础知识,有编程基础,具备独立思考和解决问题的能力。

教学要求:注重理论与实践相结合,强调动手操作和实际应用。

教学过程中要关注学生的个体差异,提供适当的指导与帮助,确保每个学生都能在原有基础上得到提升。

通过课程学习,使学生能够将所学知识应用于实际项目中,达到学以致用的目的。

二、教学内容1. 单片机基础回顾:复习单片机的硬件结构、工作原理及I/O口编程。

- 教材章节:第三章单片机硬件结构与工作原理;第四章I/O口编程。

2. 定时器与中断:学习单片机定时器的工作原理,掌握中断编程方法。

- 教材章节:第五章定时器与中断;第六章中断编程。

3. 日期时间计算:讲解日期时间的计算方法,如何在单片机中进行实现。

- 教材章节:第七章日期时间计算;第八章单片机实现日期时间计算。

4. 显示技术:学习LED显示技术,掌握动态扫描显示方法。

- 教材章节:第九章LED显示技术;第十章动态扫描显示。

5. 万年历设计与实现:结合所学知识,设计并实现单片机万年历。

- 教材章节:第十一章项目设计与实现;第十二章万年历设计与制作。

单片机万年历课程设计报告

单片机万年历课程设计报告一、课程设计目标本课程设计旨在帮助学生掌握单片机应用基础知识,学习并完成万年历电路的设计和代码编写。

通过这个实践,学生将会深入理解单片机在实际生活中的应用,同时提升自己的程序设计和解决问题的能力。

二、课程设计内容1. 万年历电路的原理和设计本次课程设计要求学生完成一个万年历电路的设计,包括硬件电路和程序设计。

在电路设计中,学生需要考虑到显示器、时钟模块、日期模块和温湿度传感器等部分的连接和调试。

在程序设计方面,学生需要实现万年历的功能,包括显示当前日期和时间、自动确定闰年、节假日提示等。

2. 单片机基本原理和应用实践在万年历电路设计之前,本课程将会对单片机基本原理进行介绍,包括单片机内部结构、芯片选型和I/O口控制等。

另外,还将介绍单片机在各种应用场景中的应用实践,如遥控、电脑控制、机器人和智能家居等。

3. 问题解决和困难克服在学生完成万年历电路设计的过程中,难免会遇到各种问题和困难。

本课程将对学生进行相关的实用技巧和方法讲解,帮助他们解决问题和克服难关。

三、课程设计流程1. 单片机基础知识介绍(2学时)讲解单片机内部结构及其原理,并介绍单片机应用实践2. 万年历电路设计(12学时)对万年历的硬件和软件进行介绍,包括连接显示器和外设、编写程序等3. 问题解决(2学时)介绍学生应对问题的技巧和方法,并帮助他们克服电路设计中的问题和难点四、课程设计评价标准1. 设计成果设计成果的好坏是课程设计的重要衡量标准之一,包括电路的设计完整性、软件功能实现等方面。

2. 实践能力课程设计是一种实践性强的学习形式,学生需要通过实践来掌握知识,因此他们的实践能力成为衡量标准之一。

3. 团队合作在课程设计的过程中,学生要协同工作,完成一个大型的项目,因此团队合作能力是衡量标准之一。

4. 学习的态度学习态度是衡量标准之一,包括学生在课程设计中的主动性、积极性和责任感等方面。

五、总结通过这个万年历课程设计,学生不仅学会了单片机应用的基础知识,还掌握了实际项目开发的方法和技巧。

单片机课程设计(可调式中文电子日历)

摘要万年历的功能可实现年、月、日、时、分、秒和星期的显示。

随着社会的发展日历的功能越来越强大,精确度越来越高。

本次设计的日历采用DS1302时钟芯片,该芯片精确度高,性能可靠。

用LCD12864液晶屏,既可以显示数字又可以显示汉字,方便了人们的生活。

本设计总体分为硬件部分和软件部分。

硬件部分可分为:时钟芯片DS1302、AT89C51和LCD12864等。

本设计非常适合家庭使用。

电源采用+5V电压供电。

走时精确,是现代家庭必备的设备之一。

关键词:单片机,万年历, DS1302,时钟芯片1引言可调式电子日历与时钟小巧便于携带,界面清爽,一目了然,方便的知晓当前时间,并可对时间做出修改,实在是居家旅行日常生活之必备用品。

在现今的可调式电子日历与时钟具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。

2.总体设计2.1基本原理硬件主要涉及到:AT89C51、DS1302、LCD12864等。

软件通过框图编写出程序。

AT89C51主要功能是存储程序、根据程序的内容对各个端口进行判断并做出相应的处理。

LCD12864主要的功能是实现年、月、日、时、分、秒的显示效果。

实时时钟DS1302可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

2.2系统总体框图及设计思路3.详细设计3.1 硬件设计3.1.1 DS1302芯片及原理介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。

实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。

工作电压宽达2.5~5.5V。

采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。

DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

单片机万年历课程设计说明书

单片机万年历课程设计说明书第一章设计原理功能:电子时钟能够显示时、分、秒显示时间的功能,还可以进行时和分的校对,而且其片选的灵活性强。

并且是以单片机为核心来设计的。

28BYJ48步进电机主要技术参数如表1-1所示。

表1-1 28BYJ48步进电机主要技术参数第二章硬件电路设计总体硬件原理图如图2-1所示。

AT89C51因为其含一个可擦除的ROM,以及其存储数据的时间长度可达10年之久所以选其作为该设计的核心控制部件。

图2-1 系统电路原理图2.1键盘电路设计该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损耗,该键盘可以实现小时和分钟的调节以及控制是否进入省电模式。

当按键按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。

达到时间调节的目的。

选择的多功能按键如图2-2所示。

图2-2 多功能控制键2.2主控模块89C5189C51是一个8位单片机,片ROM全部采用FLASH ROM技术,晶振时钟为12MHz。

89C51是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向I/O端口,分别记作P0、P1、P2、P3。

第31引脚需要接高电位使单片机选用部程序存储器;第40脚为电源端VCC,接+5V电源,第20引脚为接地端VSS,通常在VCC和VSS引脚之间接0.1μF高频滤波电容。

第三章软件设计在主程序的开始定义了一组固定单元用来存储计数的分、秒、时的存储单元。

在主程序中,对不同的按键进行扫描,实现秒表,时间调整。

系统总体流程图如图4-1所示。

图3-1 总体流程图第四章系统测试本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。

在程序设计过程中,加强了部分软件抗干扰措施,下面对部分模块作介绍。

系统开始仿真的仿真图如图4-1系统仿真图所示。

单片机课程设计实验报告(时钟、日历)..

基于单片机的电子钟设计目录第一章电子时钟设计--—--—----————-—-—-—----—-—-——-——21.1 设计原理简介--————-—----—---——---———-----——-—-—-—21.2 设计功能-——--—-—————-———-—----————---——--——-——---—3第二章主要电路元器件介绍-—-———-———-—------———---32。

1 STC89C52 单片机简介—--—--—-—-—-—-—-—---—-——-———32。

1.1 单片机简介--——--——--——---—-—--————----—————--——-—-32。

1.2 主要特性---——-------—---—-—---————-—--—--———-—-—-—32.1.3 管脚功能说明—---———-———-———-——---—-————-—-—-—-————42.1。

4 LCD1602-—------——---—--—-——--———--——------——-—-—5第三章单元电路的硬件设计—-----————————————————--63.1 硬件原理框图—-———--—--——---—--—-—---------—--———-—-63。

2 单片机 STC89C52 系统的设计-—-—-—-—-————-—————-—----63。

3 时钟电路—————-----———-—---—-——---—--—-—-—-—--————--73.4 复位电路-----——-——--———-————-———-—----———---—--—-—-------—-—--—-——---—-—————-—---——--73。

5 键盘接口电路--—---—-———--—--——--——--——----———---——-83.6 LCD1602显示——---——————--—-—-——--——----—----———-————8第四章设计总原理图—-—-—---——-----—-———-9 第五章心得体会---—-------—————--——-—-——9第六章源程序---—-—-——-—-------———---—-——————-——----10前言:摘要数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便.由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长安大学教学日历( 学期授课计划)2009---2010 学年第 2 学期课程名称单片机与嵌入式系统原理及应用适用专业及班级32010703~04任课教师汪贵平系(教研室) 主任院长(主任)长安大学教务处印制总学时总学分已完成本学期学时完成学时学分学时学分讲课习题实验上机周学时起止周次36 2 0 0 36 2 20 0 16 0 4 1-13编制说明一、课程性质和任务本课程是自动化专业的一门专业限选课。

单片机以体积小、功能全、性价比高等优点在工业控制、智能仪表、信息处理等嵌入式应用领域得到广泛应用。

本课程重点介绍国内应用最为广泛的MCS-51系列单片机的工作原理及应用技术。

本课程根据单片机应用系统的特点,结合国内生产实际应用状况和国内外先进技术,坚持理论联系实际的原则,将理论教学和实验教学紧密联系在一起,充分运用学生已学电子技术和微机原理知识进行应用系统分析和设计。

本课程重点介绍了单片机的工作原理、硬件电路设计、汇编语言程序设计和调试方法。

本课程涉及内容广泛,由于课时限制,对教材部分章节进行筛选后,重点讲解MCS-51单片机的硬件基本结构、集成开发环境、汇编语言程序设计和调试方法等主要内容,让学生全面了解单片机应用系统分析、设计、安装和调试的全过程。

在讲授过程中,重点介绍学生比较难理解的内容。

在课程讲授过程中以教学实验板作为一个典型实例介绍单片机应用系统的设计过程。

二、课程教学目标(一)对能力培养的要求通过本课程的理论学习,要求学生熟练掌握MCS-51单片机的硬件基本结构、内部各功能部件的工作原理、指令系统;掌握在Windows集成开发环境µVision3中编辑、仿真调试单片机汇编语言的方法;学会应用系统各种常用硬件接口电路的设计,熟练掌握单片机汇编语言程序设计方法。

通过教学实验板硬件测试,掌握单片机应用系统的安装、调试和故障诊断方法;学会利用ISP编程下载目标文件进行调试的方法;学会按功能模块调试软硬件的方法,最终使学生具有实现MCS-51单片机应用系统的设计能力。

通过本课程的学习,使学生基本具备根据工程应用需要,合理选择各种类型的单片机及外围电路设计其硬件电路,同时能快速熟悉该单片机的软件开发环境,并完成相应软件设计的能力。

能独立完成简单的单片机应用系统设计和调试,为学生将来从事各种复杂的单片机应用系统开发打下一个良好的基础。

总学时总学分已完成本学期学时完成学时学分学时学分讲课习题实验上机周学时起止周次36 2 0 0 36 2 20 2 16 0 4 1-13(二)本课程的重点和难点单片机原理及应用是一门软硬件相结合且应用性极强的课程,本课程的重点是让学生掌握单片机的工作原理、硬件电路设计和汇编语言程序设计;通过实验教学使学生掌握软硬件的基本调试方法,从浅入深通过简单模块调试逐步过渡到掌握根据应用需求开发单片机应用系统。

本课程的难点在于需要记忆的知识较多,硬件和软件功能如何划分,涉及知识面广且需要大量工程经验。

三、教材及参考书(一)本课程选用教材汪贵平、李登峰、龚贤武、雷旭.新编单片机原理及应用.北京:机械工业出版社,2009(二)主要参考书如下:[1] 张毅刚. 新编MCS-51单片机应用设计. 哈尔滨:哈尔滨工业大学出版社,2005[2] 胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2005[3] 张迎新,杜小平,樊桂花,雷道振.单片机初级教程.北京:北京航空航天大学出版社,2003[4] 李广弟,朱月秀,王秀山.单片机基础.北京:北京航空航天大学出版社,2000[5] 赵德安.单片机原理与应用.北京:机械工业出版社,2005四、考试本课程成绩评定采用“期末考试+平时考核+实验考核”的方式,比例为:考试成绩︰平时考核︰实验成绩=60︰10︰30。

期末考试采用闭卷笔试,平时考核依据课堂考勤、课堂表现、作业等情况综合评定,实验考核依据实验完成情况、实验报告和实验考试成绩综合评定。

五、适用专业及具体讲课时间及地点适用班级:32010703-04上课地点:WM1105(渭水校区明远教学楼)上课时间:第1-13周每周一5-6节和第1-13周周四第3-4节(双周)授课顺序周次受课章节及内容摘要学时目的与要求方式方法手段课外作业与备注讲课实验(习)习题上机1 1 第1章单片机概述1.1单片机的概念1.2单片机的发展1.3单片机应用系统的开发及开发工具1.4单片机的应用1.5本课程的主要内容和任务第2章51系列单片机硬件结构2.1内部总体结构2.2引脚定义与功能2.3存储器配置21.掌握嵌入式系统、微控制器、单片机、编程器、仿真器等基本概念。

2.掌握单片机应用系统开发的基本流程。

3.了解单片机的主要特点、发展趋势、应用范围、各种机型的选择方法和利用网站查阅单片机资料的方法。

4.掌握单片机引脚定义与功能。

重点掌握4根控制线的作用5.掌握存储器配置6.掌握寄存器和SFR的作用。

7.了解单片机内部结构。

课堂教学习题1.11.21.32.12.22 2 2.4输入/输出接口2.5时钟电路与时序2.6复位操作与复位电路21.掌握P0~P3口的结构及使用方法。

2.掌握单片机的时钟和复位电路构成。

3.掌握复位后单片机工作状态。

4.了解单片机工作时序。

课堂教学习题2.32.43 2 第3章指令系统与汇编语言程序设计3.1指令格式3.2寻址方式3.3指令系统分类介绍21.掌握指令格式。

2.掌握各种寻址方式。

3.掌握各条指令的意义。

4.熟练掌握部分指令的使用方法。

5.了解指令系统的分类课堂教学习题3.13.24 3 实验一集成开发环境的操作使用和汇编程序设计实验21.掌握汇编语言编程调试的操作过程。

熟练掌握IDE的使用方法和技巧。

2.完成3个程序的编程和调试。

课外认真阅读集成开发环境11章。

实验教学授课顺序周次受课章节及内容摘要学时目的与要求方式方法手段课外作业与备注讲课实验(习)习题上机5 4 3.4伪指令3.5汇编语言程序设计21.掌握伪指令的用法。

2.掌握汇编语言程序设计的基本方法,能阅读理解所有例题,3.掌握基本程序的结构。

4.了解编写复杂程序的基本方法。

课堂教学习题3.33.46 4 实验二跑马灯实验 2 1.掌握单片机并口编程方法。

2.掌握共阴极LED的工作特性及控制方法。

3.掌握单片机实验板的工作原理。

4.学会ISP编程的使用方法。

实验室教学7 5 第4章C51程序设计4.1C51语言简介4.2C51对C语言的扩展4.3C51使用技巧4.4 C51程序设计41.掌握C51程序结构。

2.掌握C51扩展语句的使用方法。

3.掌握C51扩展语句的使用技巧。

4.学会用C51编写实验板自检程序。

实验室教学习题4.14.24.38 6 实验三调试C51程序21.掌握C51程序调试步骤。

2. 调试好用C51编写实验板自检程序。

3. 调试好用C51编写的跑马灯程序。

4. 调试其它自编应用程序。

实验室教学授课顺序周次受课章节及内容摘要学时目的与要求方式方法手段课外作业与备注讲课实验习题上机9 7 第5章中断与定时系统5.1 中断系统5.2 计数/定时器接口5.3 综合应用41.掌握中断系统的基本概念。

2.掌握中断系统使用的相关寄存器。

3. 掌握中断系统的编程方法。

4.掌握计数/定时的基本概念。

5.掌握计数/定时使用的相关寄存器。

6. 掌握计数/定时器的编程方法。

课堂教学习题5.15.25.35.410 8 实验四键盘与显示编程实验21.编写4×4键盘动态扫描程序并调试。

2.编写6位LED数码管动态刷新显示程序并调试。

3.将上述2程序转换为子程序供后续使用。

实验室教学11 9 实验五外部中断编程实验21.学会外部中断技术的基本使用方法。

2.学会中断处理程序的编程和调试方法。

3.利用实验四显示程序编写显示外部中断按键按下次数的程序并调试通过。

实验室教学12 10 实验六定时与计数器编程实验21.学会单片机定时器的使用和编程方法。

2.进一步掌握中断处理程序的编程方法。

3.编写显示外部输入脉冲频率程序并调试通过。

实验室教学授课顺序周次受课章节及内容摘要学时目的与要求方式方法手段课外作业与备注讲课实验习题上机13 10 第6章串行接口与串行通信6.1 串行通信基础6.2 串行口的结构与工作原理6.3 控制寄存器21.掌握串行通信的基本概念。

2.掌握串行通信使用的相关寄存器的使用方法。

课堂教学习题6.16.215 11 6.4 串行通信方式6.5 串行通信接口技术21.掌握单片机串行通信的编程方法。

2.学会针对具体问题选用单片机串行通信工作方式。

3.掌握RS232、RS485和RS422的电气特性。

课堂教学习题6.36.416 12 实验七A/D转换实验21.熟悉模拟量输入通道采集电路的设计方法。

2.学习A/D转换器的编程和调试方法。

实验室教学17 12 实验八串行口通信实验21.学会PC机串口调试器的使用方法。

2.掌握串行口编程及调试方法.3.掌握串行口查询和中断两种方式的异同。

实验室教学18 13 第9章单片机应用系统设计与调试9.1 单片机应用系统开发过程9.2可行性分析9.3 系统方案设计9.4硬件设计与制作9.5 软件程序设计9.6 系统调试21.掌握应用系统的开发流程。

2.掌握系统方案设计的主要内容。

3.掌握软硬件设计与制作的基本步骤。

4.掌握系统调试的基本方法。

课堂教学习题9.19.29.39.49.59.6。

相关文档
最新文档