文档库 最新最全的文档下载
当前位置:文档库 › 51单片机电子日历课程设计

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

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

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

程序代码:

/****************************************************************************/

/* 电子日历,有时间显示、闹铃、日期、秒表及键盘设置功能 */

/* 功能键A: 设置位数字+1 闹钟模式下为闹钟开关秒表模式下为记时开关 */

/* 功能键B: 设置位数字-1 闹钟模式下为闹钟开关 */

/* 功能键C:设置模式及设置位选择秒表模式下为清零键 */ /* 功能键D:在四种工作模式下切换设置闹钟开关 */

/* 曹宇 03电子 0201029 */

/* 2006.6.3 更新 */

/****************************************************************************/

#include

#include

/***************这里设置程序初始化时显示的时间****************/

#define SET_HOUR 12 /*设置初始化小时*/

#define SET_MINUTE 00 /*设置初始化分钟*/

#define SET_SECOND 00 /*设置初始化秒数*/

/*************************系统地址****************************/

#define BASE_PORT 0x8000 /*选通基地址*/

#define KEY_LINE BASE_PORT+1 /*键盘行线地址*/

#define KEY_COLUMN BASE_PORT+2 /*键盘列线地址*/

#define LED_SEG BASE_PORT+4 /*数码管段选地址*/

#define LED_BIT BASE_PORT+2 /*数码管位选地址*/

#define LED_ON(x) XBYTE[LED_BIT]=(0x01<#define LED_OFF XBYTE[LED_SEG]=0x00 /*LED

显示空*/

/**************在设置模式下对秒分时的宏定义*****************/

#define SECOND 0 /*对应数码管右边两位*/

#define MINUTE 1 /*对应数码管中间两位*/

#define HOUR 2 /*对应数码管左边两位*/

/********************定义四种工作模式***********************/

#define CLOCK clockstr /*时钟模式*/

#define ALART alartstr /*闹钟模式*/

#define DATE datestr /*日期模式*/

#define TIMER timerstr /*秒表模式*/

/****************以下是所有子函数的声明*********************/

void sys_init(void); /*系统的初始化程序*/

void display(void); /*动态刷新一次数码管子程序*/

void clockplus(void); /*时间加1S的子程序*/

void update_clockstr(void); /*更新时间显示编码*/

void update_alartstr(void); /*更新闹钟时间的显示编码*/

void update_datestr(void); /*更新日期显示编码*/

void update_timerstr(void); /*更新秒表时间的显示编码*/

void deley(int); /*延时子程序*/

void update_dispbuf(unsigned char *); /*更新显示缓冲区*/

unsigned char getkeycode(void); /*获取键值子程序*/

void keyprocess(unsigned char); /*键值处理子程序*/

unsigned char getmonthdays(unsigned int,unsigned char);/*计算某月的天数子程序*/

/*功能键功能子函数*/

void Akey(void); /*当前设置位+1 开关闹钟开关秒表*/

void Bkey(void); /*当前设置位-1 开关闹钟 */

void Ckey(void); /*设置位选择秒表清零*/

void Dkey(void); /*切换四种工作模式*/

/**********************全局变量声明部分*********************/

unsigned char led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};/*从0~9的LED编码*/

unsigned char ledchar[3]={0x5c,0x54,0x71};/*o n f*/

//unsigned char key[24]={ /* 键值代码数组对应键位:*/

// 0x70,0x71,0x72,0x73,0x74,0x75, /* 7 8 9 A TRACE RESET*/

// 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5, /* 4 5 6 B STEP MON */

// 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5, /* 1 2 3 C HERE LAST */

// 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5}; /* 0 F E D EXEC NEXT */

struct{ /*时间结构体变量*/

unsigned char s;

unsigned char m;

unsigned char h;

}clock={SET_SECOND,SET_MINUTE,SET_HOUR};

struct{ /*闹铃时间结构体变量*/

unsigned char m;

unsigned char h;

}alart={SET_MINUTE,SET_HOUR};

struct{ /*日期结构体变量*/

unsigned int year;

unsigned char month;

unsigned char day;

}date={6,1,1};

struct{ /*秒表时间结构体变量*/

unsigned char ms;

unsigned char s;

unsigned char m;

}timer={0,0,0};

unsigned char dispbuf[6]; /*显示缓冲区数组*/

unsigned char clockstr[6]; /*时间显示的数码管编码数组*/

unsigned char alartstr[6]; /*闹钟显示的数码管编码数组*/

unsigned char datestr[6]; /*日期显示的数码管编码数组*/

unsigned char timerstr[6]; /*秒表显示的数码管编码数组*/

unsigned int itime=0,idot; /*定时器0中断计数*/

unsigned char itime1=0; /*定时器1中断计数*/

sbit P3_1=P3^1; /*外接蜂鸣器的管脚*/

bdata bit IsSet=0; /*设置模式标志位 0:正常走时 1:设置模式*/

bdata bit Alart_EN=0; /*闹铃功能允许位 0:禁止闹铃 1:允许闹铃*/

bdata bit IsBeep=0; /*响铃标志位 0:未响铃 1:正在响铃*/ unsigned char SetSelect=0; /*在设置模式IsSet=1时,正在被设置的位,对应上面的宏*/ unsigned char *CurrentMode; /*标志当前正设置的功能,如CurrentMode=CLOCK或CurrentMode=ALART等*/

void timerplus(void);

/**************************函数部分*************************/

void main(void)

{

sys_init();

while(1)

{

XBYTE[KEY_COLUMN,0x00]; /*给键盘列线赋全零扫描码,判断是否有键按下 */

while((XBYTE[KEY_LINE]&0x0f)==0x0f) /*检测是否有键按下,无则一直进行LED的刷新显示*/

{

if(Alart_EN&&(clock.h==alart.h)&&(clock.m==alart.m)) {IsBeep=1;}

else

{ IsBeep=0;

P3_1=0;}

display();

}

keyprocess(getkeycode()); /*有键按下时得到键值,并送入键值处理程序*/

display(); /*可要可不要*/

}

}

void sys_init(void)

{

TMOD=0x22; /*定时器0和1都设置为工作方式2,基准定时250×2=500us=0.5ms*/

TH0=6; /*定时器0中断服务用来产生1秒时钟定时及闹钟蜂鸣器蜂鸣脉冲*/

TL0=6; /*定时器1中断服务留给秒表使用,产生1/100秒定时*/

TH1=6;

TL1=6;

ET0=1;

ET1=1;

EA=1;

TR0=1;

update_clockstr(); /*初始化时钟显示编码数组*/

update_alartstr(); /*初始化闹钟显示编码数组*/

update_datestr(); /*初始化日期显示编码数组*/

update_timerstr(); /*初始化秒表显示编码数组*/

update_dispbuf(clockstr);/*初始化显示缓冲数组*/

CurrentMode=CLOCK; /*默认的显示摸式为时钟*/

P3_1=0; /*蜂鸣器接线引脚复位*/

}

void timer0(void) interrupt 1 using 1 /*定时器0中断服务器,用来产生1秒定时*/ {

itime++;

if(itime==1000)

{

if(IsSet) /*在设置模式下,对正在设置的位闪烁显示*/

{

dispbuf[SetSelect*2]=0; /*对正在设置的位所对应的显示缓冲区元素赋0,使LED灭*/

dispbuf[SetSelect*2+1]=0;

}

if(IsBeep) P3_1=!P3_1; /*闹钟模式时,产生峰鸣器响脉冲*/

if(CurrentMode==CLOCK)

{

dispbuf[2]=dispbuf[2]&0x7f;

dispbuf[4]=dispbuf[4]&0x7f;

}

}

if(itime==2000) /*两千次计数为1S 2000×0.5ms=1s*/

{

itime=0; /*定时1s时间到,软计数清零*/

clockplus(); /*时间结构体变量秒数加1 */

update_clockstr(); /* 更新时间显示编码数组 */

if(CurrentMode!=TIMER) update_dispbuf(CurrentMode); /* 用时间编码数组更新显示缓冲区 */

}

}

void timer1(void) interrupt 3 using 2 /*定时器1中断服务器,用来产生1/100秒定时*/

{

idot++;

if(++itime1==20) /*20*0.5ms=10ms*/

{

itime1=0;

timerplus();

update_timerstr();

if(CurrentMode==TIMER)

{

update_dispbuf(timerstr);

dispbuf[2]=dispbuf[2]&0x7f; /*关闭小数点的显示*/

dispbuf[4]=dispbuf[4]&0x7f;

if(idot<1000) /*闪烁显示小数点*/

{

dispbuf[2]=dispbuf[2]|0x80;

dispbuf[4]=dispbuf[4]|0x80;

}else{

dispbuf[2]=dispbuf[2]&0x7f;

dispbuf[4]=dispbuf[4]&0x7f;

}

}

}

if(idot==2000) idot=0;

}

/*功能模块子函数*/

void clockplus(void) /*时间加1s判断分,时子函数*/

{

if(++clock.s==60) /*秒位判断*/

{

clock.s=0;

if(++clock.m==60) /*分位判断*/

{

clock.m=0;

if(++clock.h==24) /*时位判断*/

{

clock.h=0;

if(++date.day==(getmonthdays(date.year,date.month)+1))

{

date.day=1;

if(++date.month==13) date.month=1;

}

}

}

}

}

void timerplus() /*秒表1/100秒位加1,判断秒、分子程序*/

{

if(++timer.ms==100)

{

timer.ms=0;

if(++timer.s==60)

{

timer.s=0;

if(++timer.m==60)

{

timer.m=0;

}

}

}

}

void update_clockstr(void) /*更新时钟显示代码数组clockstr*/

{

clockstr[0]=led[clock.s%10]; /*给元素0赋相应数码管显示编码,编码序号是秒数的个位*/

clockstr[1]=led[(int)(clock.s/10)]; /*给元素1赋相应数码管显示编码,编码序号是秒数的十位*/

clockstr[2]=led[clock.m%10]; /*以下类推*/

clockstr[3]=led[(int)(clock.m/10)];

clockstr[4]=led[clock.h%10];

clockstr[5]=led[(int)(clock.h/10)];

}

void update_alartstr(void) /*更新闹钟显示代码数组alartstr*/

{ /*右边两位显示on:闹钟开启 of:闹钟关闭*/

if(Alart_EN) alartstr[0]=ledchar[1];/*显示字母n*/

else alartstr[0]=ledchar[2]; /*显示字母f*/

alartstr[1]=ledchar[0]; /*显示字母o*/

alartstr[2]=led[alart.m%10];

alartstr[3]=led[(int)(alart.m/10)];

alartstr[4]=led[alart.h%10];

alartstr[5]=led[(int)(alart.h/10)];

}

void update_datestr(void) /*更新日期显示代码数组datestr*/

{

datestr[0]=led[date.day%10];

datestr[1]=led[(int)(date.day/10)];

datestr[2]=led[date.month%10];

datestr[3]=led[(int)(date.month/10)];

datestr[4]=led[date.year%10];

datestr[5]=led[(int)(date.year/10)];

}

void update_timerstr(void) /*更新秒表显示代码数组timerstr*/

{

timerstr[0]=led[timer.ms%10];

timerstr[1]=led[(int)(timer.ms/10)];

timerstr[2]=led[timer.s%10];

timerstr[3]=led[(int)(timer.s/10)];

timerstr[4]=led[timer.m%10];

timerstr[5]=led[(int)(timer.m/10)];

}

void display(void) /*刷新显示六位LED一次*/

{

unsigned char i;

for(i=0;i<6;i++)

{

LED_ON(i); /*选通相应位*/

XBYTE[LED_SEG]=dispbuf[i]; /*写显示段码*/

deley(50); /*延时显示*/

LED_OFF; /*写LED全灭段码*/

}

}

void update_dispbuf(unsigned char *str) /*更新显示缓冲区子函数,参数为要用来更新缓冲区的源字符数组的首地址*/

{

dispbuf[0]=str[0]; /*将要更新的源字符数组内容COPY至dispbuf数组,用作显示缓冲区*/

dispbuf[1]=str[1];

dispbuf[2]=str[2]|0x80; /*默认把时位和分位后面的小数点显示出来,根据需要再取舍*/

dispbuf[3]=str[3];

dispbuf[4]=str[4]|0x80;

dispbuf[5]=str[5];

}

void deley(int i) /*延时子函数*/

{

while(i--);

}

unsigned char getkeycode(void) /*键盘扫描子程序,返回获得的键码*/

{

unsigned char keycode; /*键码变量,一开始存行码*/

unsigned char scancode=0x20; /*列扫描码*/

unsigned char icolumn=0; /*键的列号*/

display(); /*用刷新数码管显示的时间去抖*/

XBYTE[KEY_COLUMN]=0x00;

keycode=XBYTE[KEY_LINE]&0x0f; /*从行端口读入四位行码*/

while((scancode&0x3f)!=0) /*取scancode的低六位,只要没变为全0,则执行循环*/

{

XBYTE[KEY_COLUMN]=(~scancode)&0x3f; /*给列赋扫描码,第一次为011111*/

if((XBYTE[KEY_LINE]&0x0f)==keycode) break; /*检测按键所在的列跳出循环*/

scancode=scancode>>1; /*列扫描码右移一位*/

icolumn++; /*列号加1*/

}

keycode=keycode<<4; /*把行码移到高四位*/

keycode=keycode|icolumn; /*由行码和列码组成键码*/

//等待按键放开

XBYTE[KEY_COLUMN]=0x00;

while((XBYTE[KEY_LINE]&0x0f)!=0x0f) display();

return keycode;

}

void keyprocess(unsigned char keycode) /*键值处理函数*/

{

switch (keycode)

{

case 0x73: Akey();

break;

case 0xB3: Bkey();

break;

case 0xD3: Ckey();

break;

case 0xE3: Dkey();

break;

default: break;

}

update_dispbuf(CurrentMode);

}

unsigned char getmonthdays(unsigned int year,unsigned char month)/*得到某月的天数*/

{

unsigned char days;

switch (month)

{

case 4:

case 6:

case 9:

case 11:days=30;

break;

case 2: if(year%4==0) days=29;

else days=28;

break;

default:days=31;

break;

}

return days;

}

/*功能键子函数部分*/

void Akey(void) /*对当前设置位进行加一操作,如果设置秒位,则给秒位清零*/

{

if(CurrentMode==TIMER) /*秒表模式下启闭走时*/

{ TR1=!TR1;

return;

}

if(!IsSet) return; /*如果不是设置模式退出*/

switch (SetSelect)

{

case SECOND:if(CurrentMode==CLOCK)

{

clock.s=0; /*如果当前被设置位是秒位,则清零秒位*/ update_clockstr();

}

if(CurrentMode==ALART)

{

Alart_EN=!Alart_EN;

update_alartstr();

}

if(CurrentMode==DATE)

{

if(++date.day==(getmonthdays(date.year,date.month)+1)) date.day=1;

update_datestr();

}

if(CurrentMode==TIMER)

{

TR1=!TR1;

}

break;

case MINUTE:if(CurrentMode==CLOCK)

{

if(++clock.m==60) clock.m=0; /*如果当前被设置分位,则分位加1*/

update_clockstr();

}

if(CurrentMode==ALART)

{

if(++alart.m==60) alart.m=0;

update_alartstr();

}

if(CurrentMode==DATE)

{

if(++date.month==13) date.month=1;

update_datestr();

}

break;

case HOUR: if(CurrentMode==CLOCK)

{

if(++clock.h==24) clock.h=0; /*如果当前被设置时位,则时位加1*/

update_clockstr();

}

if(CurrentMode==ALART)

{

if(++alart.h==24) alart.h=0;

update_alartstr();

}

if(CurrentMode==DATE)

{

if(++date.year==100) date.year=0;

update_datestr();

}

break;

default: break;

}

update_dispbuf(CurrentMode);

}

void Bkey(void) /*对当前设置位进行减一操作,如果设置秒分,则给秒位清零,类比Akey()函数*/

{

if(!IsSet) return;

switch (SetSelect)

{

case SECOND:if(CurrentMode==CLOCK)

{

clock.s=0;

update_clockstr();

}

if(CurrentMode==ALART)

{

Alart_EN=!Alart_EN;

update_alartstr();

}

if(CurrentMode==DATE)

{

if(--date.day==0x00)

date.day=getmonthdays(date.year,date.month);

update_datestr();

}

break;

case MINUTE:if(CurrentMode==CLOCK)

{

if(--clock.m==0xff) clock.m=59;

update_clockstr();

}

if(CurrentMode==ALART)

{

if(--alart.m==0xff) alart.m=59;

update_alartstr();

}

if(CurrentMode==DATE)

{

if(--date.month==0x00) date.month=12; update_datestr();

}

break;

case HOUR: if(CurrentMode==CLOCK)

{

if(--clock.h==0xff) clock.h=23;

update_clockstr();

}

if(CurrentMode==ALART)

{

if(--alart.h==0xff) alart.h=23;

update_alartstr();

}

if(CurrentMode==DATE)

{

if(--date.year==0xffff) date.year=99;

update_datestr();

}

break;

default: break;

}

update_dispbuf(CurrentMode);

}

void Ckey(void) /*正常走时模式和设置模式的切换*/

{

if(CurrentMode==TIMER)

{

TR1=0; /*初始化定时器1设置,停止秒表记时*/

TH1=6;

TL1=6;

timer.ms=0; /*初始化秒表数组*/

timer.s=0;

timer.m=0;

update_timerstr();

}else

{

if(IsSet==0) /*在非秒表模式下,第一次按下C键进入设置模式,设置时位*/

{

IsSet=1; /*置位标志位,进入设置模式 */

SetSelect=HOUR;

return;

} /*第二次按C键设置分位,第三次按键设置秒位,第四次按键完成退出设置*/

if(SetSelect==0) /*按到第四次,即设置完秒位后,将标志位IsSet置0,完成设置*/ {

IsSet=0; /*复位标志位,进入正常走时模式*/

return;

}

if(SetSelect>0) SetSelect--; /*设置位的标志变量SetSelect=0:时位 1:分位 2:秒位*/

}

}

void Dkey(void) /*工作状态切换:时钟、闹钟、日期、秒表*/

{

if(CurrentMode==CLOCK) /*切换至闹钟,同时开关闹钟*/

{ CurrentMode=ALART;

Alart_EN=!Alart_EN;

update_alartstr();

return;

}

if(CurrentMode==ALART) /*切换至日期*/

{ CurrentMode=DATE;

return;

}

if(CurrentMode==DATE) /*切换至秒表,同时关闭设置模式*/ {

CurrentMode=TIMER;

IsSet=0;

return;

}

if(CurrentMode==TIMER) /*切换至时钟*/

{

CurrentMode=CLOCK;

return;

}

}

51单片机课程设计

课程设计说明书
课程设计名称






学生姓名
指导教师
单片机原理及应用课程设计 电子信息工程 140405 20141329 李延琦 胡黄水
2016 年 12 月 26 日

课程设计任务书
课程设计 题目
酒精测试仪
起止日期
2016 年 12 月 26 日— 2017 年 1 月 6 日
设计地点
计算机科学与工程学 院单片机实验室 3409
设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速 6.电子音乐发声(自己选曲) 7.键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1--7 题任选其二即可。(二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2--4 天:进实验室做实验,连接硬件并编写程序作相关的模块实验。 第 5--7 天:编写程序,并调试通过。观察及总结硬件实验现象和结果。 第 8--9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求:
1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每 位同学独立完成。 2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释 4) 总结 5) 参考资料 6)附录 实验上机调试内容
注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计 的依据。

基于-89C51单片机的秒表课程设计汇本

《单片机技术》 课程设计报告 题目:基于MCU-51单片机的秒表设计班级: 学号: 姓名: 同组人员: 指导教师:王瑞瑛、汪淳 2014年6月17日

目录 1课程设计的目的 (3) 2 课程设计题目描述和要求 (3) 2.1实验题目 (4) 2.2设计指标 (4) 2.3设计要求 (4) 2.4增加功能 (4) 2.5课程设计的难点 (4) 2.6课程设计容提要 (4) 3 课程设计报告容 (5) 3.1设计思路 (5) 3.2设计过程 (6) 3.3 程序流程及实验效果 (7) 3.4 实验效果 (16) 4 心得体会 (17)

基于MCS-51单片机的秒表设计 摘要:单片机控制秒表是集于单片机技术、模拟电子技术、数字技术为一体的机电一体化高科技产品,具有功耗低,安全性高,使用方便等优点。本次设计容为以8051 单片机为核心的秒表,它采用键盘输入,单片机技术控制。设计容以硬件电路设计,软件设计和PCB 板制作三部分来设计。利用单片机的定时器/计数器定时和计数的原理,用集成电路芯片、LED 数码管以及按键来设计计时器。将软、硬件有机地结合起来,使他拥有正确的计时、暂停、清零、并同时可以用数码管显示,在现实生中应用广泛。 关键词:秒表;8051;定时器;计数器 1 课程设计的目的 《单片机应用基础》课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的就是配合本课程的教学和平时实验,以达到巩固消化课程的容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。 2 课程设计题目描述和要求

基于51单片机的电子台历设计

摘要 本设计是一个基于单片机AT89S51的简易电子台历,附有复位电路,时钟电路,键盘电路。复位电路是单片机的初始化操作,除了正常的初始化外,当程序运行出错后或者操作失误使系统进入死锁状态时,为摆脱困境,也需要能够通过独立式键盘电路进行启动,调整,再运行,时钟电路采用12MHZ的晶振,作为系统的时钟源,具有较高的准确性。 在上电或者复位时数码管显示年,月,日,时,分,秒。A键用于模式调整,形成一个循环,按一次键,即对秒调整。再按一次对分调整,如此循环。B键用于按下A键之后进行加1的操作,按一次加1,C键用于减1的操作,按一次减1。能够完成从00时00分00秒到23时59分59秒的循环计时,过23时59分59秒,日期增加1,当日期达到1个月后,月进位1,满12个月后,年进位1,年的首2位保持不变,始终为20。单片机并行口的电子台历的设计在AT89S51的P0口和P2口外接由14个LED数码管(LED7~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.7~P2.0作LED的段码年月日的位控输出线(P2.7~P2.0对应于LED7~LED0),P1.7~P1.0对应时间的数码管,P3口外接三个按键A、B、C(对应于P3.0~P3.2)。数码管为4位一体的共阳极的数码管,数码管采用动态扫描法,从右往左依次点亮,显示数字。 关键字:单片机、电子台历、数码管 ABSTRACT The design is a single electrical calendar basing SCMC of AT89S51. There are restoration circuit, clock circuit and keyboard circuit. Restoration circuit is used as an original operation, besides normal start-up, when the program runs mistakenly and system loses its order ,in order to get rid of the trouble, it also need to restart ,adjust and run through keyboard. Clock circuit uses 12MHZ Crystal as the source of the calendar ,with a high accuracy. When the system starts, the display shows year, month ,day, week and time the A keyboard is used to start and adjust, the B keyboard is used to add 1,when press it ,the date will add 1, the C keyboard is used to minus 1, when press it , the date will minus 1.It can make a cycle from 00:00 to 23:59:59.The display includes 14 LEDS, the SCMC joins the display in the P1, P0 ports and P2 ports, the SCMC joins the keyboards in the P3 scan, lighting the LEDS from right to left , showing the numbers. Keywords: SCMC, Calendar LED

基于51单片机课程设计

基于51单片机课程设计报告 院系:电子通信工程 团组:电子设计大赛1组 姓名: 指导老师:

目录 一、摘要 (3) 二、系统方案的设计 (3) 三、硬件资源 (5) 四、硬件总体电路搭建 (13) 五、程序流程图 (14) 六、设计感想 (14) 七、参考文献 (16) 附录 (17) 附录 1 程序代码 (17)

一、摘要 本设计以STC89C51单片机为核心的温度控制系统的工作原理和设计方法。温度信号由温度芯片DS18B20采集,并以数字信号的方式传送给单片机。文中介绍了该控制系统的硬件部分,包括:温度检测电路、温度控制电路。单片机通过对信号进行相应处理,从而实现温度控制的目的。文中还着重介绍了软件设计部分,在这里采用模块化结构,主要模块有:数码管显示程序、键盘扫描及按键处理程序、温度信号处理程序、led控制程序、超温报警程序。 关键词:STC89C51单片机 DS18B20温度芯片温度控制 ,LED报警提示. 二、系统方案的设计 1、设计要求 基本功能: 不加热时实时显示时间,并可手动设置时间; 设定加热水温功能。人工设定热水器烧水的温度,范围在20~70度之间,打开开关后,根据设定温度与水温确定是否加热,及何时停止加热,可实时显示温度; 设定加热时间功能。限定烧水时间,加热时间内超过温度上限或低于温度下限报警,并可实时显示温度。 2、系统设计的框架

本课题设计的是一种以STC89C51单片机为主控制单元,以DS18B20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并记录当前的时间。其主要包括:电源模块、温度测量及调理电路、键盘、数码管显示、指示灯、报警、继电器及单片机最小系统。 图1 系统设计框架 3 工作原理 温度传感器 DS18B20 从设备环境的不同位置采集温度,单片机STC8951获取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进行调整。当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备(压缩制冷器) ,当采集的温度经处理后低于设定温度的下时 , 单片机通过三极管驱动继电器开启升温设备 (加热器) ,这里采用通过LED1和LED2取代!!! 当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声,这里采用HLLED提示。

单片机课程设计——基于51单片机的温度监控系统设计

单片机课程设计报告 题目:温度监控系统设计 学院:能源与动力工程学院 专业:测控技术与仪器专业 班级: 2班 成员:魏振杰 二〇一五年十二月

一、引言 温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。对于不同场所、不同工艺、所需温度高低范围不同、精度不同,则采用的测温元件、测方法以及对温度的控制方法也将不同;产品工艺不同、控制温度的精度不同、时效不同,则对数据采集的精度和采用的控制算法也不同,因而,对温度的测控方法多种多样。 随着电子技术和微型计算机的迅速发展,微机测量和控制技术也得到了迅速的发展和广泛的应用。利用微机对温度进行测控的技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性。 作为获取信息的手段——传感器技术得到了显著的进步,其应用领域较广泛。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握各类传感器的基本结构、工作原理及特性是非常重要的。 为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本系统利用传感器与单片机相结合,应用性比较强,本系统可以作为仓库温度监控系统,如果稍微改装可以做热水器温度调节系统、实验室温度监控系统,以及构成智能电饭煲等等。课题主要任务是完成环境温度监测,利用单片机实现温度监测并通过报警信号提示温度异常。本设计具有操作方便,控制灵活等优点。 本设计系统包括单片机,温度采集模块,显示模块,按键控制模块,报警和指示模块五个部分。文中对每个部分功能、实现过程作了详细介绍。整个系统的核心是进行温度监控,完成了课题所有要求。 二、实验目的和要求 2.1学习DS18B20温度传感芯片的结构和工作原理。 2.2掌握LED数码管显示的原理及编程方法。 2.3掌握独立式键盘的原理及使用方法。 2.4掌握51系列单片机数据采集及处理的方法。 三、方案设计

基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING

目录 第一部分课程设计任务书 (1) 一、课程设计题目 (1) 二、课程设计时间 (1) 三、实训提交方式 (1) 四、设计要求 (1) 第二部分课程设计报告 (2) 一、单片机发展概况 (2) 二、MCS-51单片机系统简介 (2) 三、设计思想 (3) 四、硬件电路设计 (3) 1. 总体设计 (3) 2. 晶振电路 (4) 3. 复位电路 (4) 4. DS1302时钟电路 (5) 5. 温度采集系统电路 (5) 6. 按键调整电路 (6) 7. 闹钟提示电路 (6) 五、软件设计框图 (7) 六、程序源代码 (8) 1. 主程序 (8) 2. 温度控制程序 (11) 3. 日历设置程序 (13) 4. 时钟控制程序 (18) 5. 显示设置程序 (20) 七、结束语 (23) 八、课程设计小组分工 (23) 九、参考文献 (23)

第一部分课程设计任务书 一、课程设计题目 用中小规模集成芯片设计制作万年历。 二、课程设计时间 五天 三、实训提交方式 提交实训设计报告电子版与纸质版 四、设计要求 (1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。 (3)具有闹钟功能。 (4)能够显示环境温度,误差小于±1℃ (5)计时精度:月误差小于20秒。

第二部分课程设计报告 一、单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段: 第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。 第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。 第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。 二、MCS-51单片机系统简介 MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。8051单片机的基本性能有: ◆8位CPU; ◆布尔代数处理器,具有位寻址能力; ◆128B内部RAM,21个专用寄存器; ◆4KB内部掩膜ROM; ◆2个16位可编程二进制加1定时器/计数器; ◆32个(4×8位)双向可独立寻址的I/O口; ◆1个全双工UART(异步串行通信口); ◆5个中断源,两级中断结构; ◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz; ◆外部程序/数据存储器寻址空间均为64KB; ◆111条指令,大部分为单字节指令; ◆单一+5V电源供电,双列直插40引脚DIP封装。

基于51单片机简易电子琴的课程设计

基于51单片机简易电子琴 1 课题背景 单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。他的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有8个按键,和一个复位按键。 主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴硬件的组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏要表达的音符。并且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们想演奏的那首曲目。当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。 2 任务要求与总体设计方案 2.1 设计任务与要求 利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出7个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。前面的发音停止,转到后按的键的发音程序。发出后按的键的音调。 2.2 设计方案 2.2.1 播放模块 播放模块是由喇叭构成,它几乎不存在噪声,音响效果较好,而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。 2.2.2 按键控制模块

单片机课程设计题目..(DOC)

单片机课程设计题目 1 基于单片机的数字电压表设计 2 基于单片机的智能电压表设计(温度检测器) 3 基于单片机的智能船模设计 4 基于单片机的电梯控制模型设计 5 基于单片机的水位控制系统设计(STC89—51型) 6 基于单片机的多路数据采集系统设计 7 基于单片机的8路抢答器设计 9 基于单片机的数字温度计设计 10 基于单片机的智能小车设计 11 基于单片机的数字温度计设计 12 基于单片机的遥控器设计 13 基于单片机的串行通信发射机设计 14 基于单片机的简易智能电动车设计 15 基于单片机的太阳能热水器控制器设计 16 基于单片机的太阳能热水器控制器设计 17 MCS-51单片机温度控制系统的设计 18 直流电动机的转速检测与脉宽调速 19 基于单片机的智能机器人的设计 20 基于单片机的简易无线竞赛系统的设计 21 基于单片机的车辆闯红灯监控系统设计(89C51) 22 基于单片机控制的井下瓦斯监控系统设计 23 基于单片机的煤气泄漏检测报警装置设计 24 基于单片机的井式渗碳炉控制系统设计 25 基于单片机的蔬菜大棚温湿度智能控制系统设计 26 基于单片机的电子钟设计 27 基于单片机的电力线载波节电群控设计 28 基于单片机的液位控制器设计

29 基于单片机的串行通信发射机设计 30 基于单片机的智能八路抢答器设计 32 基于单片机的水位监控器设计(STC12C2052AD) 32 基于单片机的点阵电子显示屏设计 33 基于单片机的智能温度控制系统设计 34 基于单片机的智能时钟控制器设计 35 基于单片机的智能温控系统设计 36 基于单片机的智能寻迹避障小车设计 37 基于单片机的家用太阳能热水器控制器设计 38 基于单片机的新型抢答计分器设计 39 基于单片机的热敏电阻测温系统设计 40 基于单片机的林火监测系统-飞艇姿态控制系统设计 41 基于单片机的人性化时钟控制器设计 42 基于单片机的智能型电话远程遥控器设计 43 基于单片机的远程通讯控制器设计 45 基于单片机的智能水位控制器设计 46 基于单片机的水位控制系统设计 47 基于单片机的智能电动小车设计 48 基于单片机的数码电子时钟设计 49 -基于单片机的数控直流电源设计 50 基于单片机的交通灯控制器设计 51 基于单片机的数字温度计设计(STC89C51) 52 基于单片机的智能小车设计 53 基于单片机的温度控制器设计 54 基于单片机的串行通信发射机设计(版本3) 55 基于单片机的温度控制系统设计(版本1) 56 基于单片机的交通灯控制系统设计 D58-基于单片机的电子万年历设计 D59-基于单片机的水位控制器设计 D60-基于单片机的水位控制系统设计(版本2)

本科毕业设计--基于51单片机的电子日历设计

成都电子机械高等专科学校成教院毕业设计(论文) 论文题目:基于51单片机的电子日历设计 教学点:重庆科创职业学院 指导老师:张忠雨职称:讲师 学生姓名:聂燕学号: 2011700558 专业:应用电子技术 成都电子机械高等专科学校成教院制 2012 年 3 月 9 日

成都电子机械高等专科学校成教院毕业设计(论文)任务书 题目:基于51单片机的电子日历设计 任务与要求: 通过单片机设计电子日历数码管正常显示阳历、阴历日期,显示的格式为年-月-日,利用外部按键的操作实现阳历和阴历之间的 转换,实现阴历和阳历显示的暂停、运行等功能。 时间:2011年12月15日至2012 年3月15日共12 周教学点:重庆科创职业学院 学生姓名:聂燕学号:2011700558 专业:应用电子技术 指导单位或教研室: 指导教师:张忠雨职称:讲师 成都电子机械高等专科学校成教院制

毕业设计(论文)进度计划表

摘要 设计以单片机AT89C51为核心部件的电子日历,利用74LS245作为驱动器,74LS138作为译码器使用,六个七段数码管均采用共阴极的方式,P0口作为段选码输出口,P2口作为位选码输出口。 本次设计的题目是基于单片机的电子日历设计,可以正常的显示年、月、日,还可以利用外部按键实现阴历和阳历之间的转换以及暂停等功能。电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。适用于家庭、公司、机关等众多场所。为人们的日常生活、出行安排提供了方便,成为人们日常生活中不可缺少的一部分。 本次设计可分为两部分:硬件系统、软件系统。 硬件系统包括:AT89S51单片机、74LS245驱动器、74LS138译码器、RC复位电路、+5V直流电源电路、去抖电路、动态显示扫描电路。 软件系统主要有单片机的编程构成。 关键词:单片机,日历,位码,段码,显示

基于51单片机的电子琴设计课程设计

目录 前言 (2) 第1章基于51单片机的电子琴设计 (3) 1.1 电子琴的设计要求 (3) 1.2 电子琴设计所用设备及软件 (3) 1.3 总体设计方案 (3) 第2章系统硬件设计 (5) 2.1 琴键控制电路 (5) 2.2 音频功放电路 (6) 2.3 时钟-复位电路 (6) 2.4 LED显示电路 (6) 2.5 整体电路 (6) 第3章电子琴系统软件设计 (7) 3.1 系统硬件接口定义 (7) 3.2 主函数 (8) 3.2.1 主函数程序 (8) 3.3 按键扫描及LED显示函数 (9) 3.3.1 键盘去抖及LED显示子程序 (10) 3.4 中断函数 (11) 3.4.1 中断程序 (12) 第4章电子琴和调试 (12) 4.1 调试工具 (12) 4.2 调试结果 (13) 4.3 电子琴设计中的问题及解决方法 (14) 第5章电子琴设计总结 (15) 参考文献 (16) 附录 (17)

前言 音乐教育是学校美育的主要途径和最重要内容,它在陶冶情操、提高素养、开发智力,特别是在培养学生创新精神和实践能力方面发挥着独特的作用。近年来,我国音乐教育在理论与实践上都取得了有目共睹的成绩,探索并形成了具有中国特色的、较为完整的音乐教育教学体系。但我国音乐教育的改革力度离素质教育发展的要求还存在一定距离。如今,电子琴作为电子时代的新产物以其独特的功能和巨大的兼容性被人们广泛的接受和推崇。而在课堂教学方面,它拥有其它乐器无法比拟的两个瞬间:瞬间多元素思维的特殊的弹奏方法;瞬间多声部(包括多音色)展示的乐队音响效果的特点。结合电子琴自身强大的功能及独特的优点来进行音乐教育的实施,这样就应该大力推广电子琴进入音乐教室,让电子琴教学在音乐教育中发挥巨大的作用。现代乐器中,电子琴是高新科技在音乐领域的一个代表,体现了人类电子技术和艺术的完美结合。电子琴自动伴奏的稳定性、准确性,以及鲜明的强弱规律、随人设置的速度要求,都更便于人们由易到难、深入浅出的准确掌握歌曲节奏和乐曲风格,对其节奏的稳定性和准确性训练能起到非常大的作用。电子琴所包含的巨量的音乐信息和强大的音乐表现力可以帮助音乐教学更好地贯彻和落实素质教育,更有效地提高人们的音乐素质和能力。目前,市场上的电子琴可谓琳琅满目,功能也是越来越完备。以单片机作为主控核心,设计并制作的电子琴系统运行稳定,其优点是硬件电路简单、软件功能完善、控制系统可靠、性价比较高等,具有一定的实用与参考价值。这就为电子琴的普及提供了方便。 二、电子琴设计要求本设计主要是用AT89C51单片机为核心控制元件,设计一台电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有7个按键和1个复位按键。本系统主要是完成2大功能:音乐自动播放、电子琴弹奏。关于声音的处理,使用单片机C语言,利用定时器来控制频率,而每个音符的符号只是存在自定义的表中。

单片机课程设计题目

1.电子秒表设计:设计一个4位LED数码显示“秒表”,显示时间为00.00~99.99秒,每0.01 秒自动加一。另设计一个“开始”按键和一个“复位”按键。(2人) 2.简易4位(0—9999)计算器(+、-、*、/、四种运算)设计:设计一个能实现0-9整数 加法运算的计算器,利用LCD显示。键盘包括0-9及“+、-、*、/”和“=”及“清除” 16个按键。(除法应保留足够的的小数,满足共4位的显示)要有错误显示Err。(2人) 3.频率数显表:设计一个能实现对脉冲频率测量显示的电路。输入频率范围(0-10k),显 示为xxx.xx,用两个指示灯指示显示数字的单位,Hz和KHz两档,根据输入频率自动切换显示档。(脉冲信号是由外部信号发生器提供)(2人) 4.信号灯控制系统:南北线有红黄绿三只信号灯,东西线有红黄绿三只信号灯。 要求:(闪烁3次,每次亮灭时间各1s)时序要求如下(原始状态) 设计一个递增键和一个递减键,用于调节功能键选定的方向的绿灯时间,时间范围(10s-50s),每次以0.5S为增量。(2人) 5.简易电子时钟:用4位LED数码管分别显示小时数分钟和秒数,两个按键,一个为功能 键,用于切换显示界面(两个显示界面,一个是小时分钟,一个是秒数)长按此键3S 进入当前界面的参数修改界面。另一个按键用于参数修改(参数递增或递减),长按此键3s退参数修改,时间要求用单片机自带的定时器得到。(2人) 6.智能电子钟(LCD显示):以A T89C51单片机为核心,制作一个LCD显示的智能电子 钟:(1) 计时:秒、分、时、天、周、月、年。(2) 闰年自动判别。(3) 五路定时输出,可任意关断(最大可到16路)。(4) 时间、月、日交替显示。(5) 自定任意时刻自动开/关屏。(6) 计时精度:误差≤1秒/月(具有微调设置)。(7) 键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键K1、K2完成。采用时钟芯片DS1302进行制作 7.多路报警器设计。用AT89C51单片机设计报警系统,用16个开关模拟报警点,当有 开关闭合时,用P1.0产生方波信号驱动蜂鸣器作为报警信号,同时用2位数码管显示报警点(即是第几个开关)。(2人) 8.简易数字电压表设计。利用单片机AT89S51与AD设计一个数字电压表,能够测量0- 36V之间的直流电压值,用LCE显示(根据测量精度,自定显示的位数)。(2人) 9.波形发生器。三种信号:正弦波、方波、三角波。利用DA转换器设计一波形发生器,

51单片机红绿灯课程设计

1 电源提供方案 为使模块稳定工作,须有可靠电源。因此考虑了两种电源方案:方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。 方案二:采用单片机控制模块提供电源。改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。综上所述,选择方案二。 2 显示界面方案 该系统要求完成倒计时功能。基于上述原因,我考虑了二种方案:方案一:采用数码管显示。这种方案只显示有限的符号和数码字符,简单,方便。方案二:采用点阵式LED 显示。这种方案虽然功能强大,并可方便的显示各种英文字符,汉字,图形等,但实现复杂,成本较高。 综上所述,选择方案一。 3 输入方案: 设计要求系统能调节灯亮时间,并可处理紧急情况,我研究了两种方案:方案一:采用8155扩展I/O 口及键盘,显示等。 该方案的优点是:使用灵活可编程,并且有RAM,及计数器。若用该方案,可提供较多I/O 口,但操作起来稍显复杂。 方案二:直接在I/O口线上接上按键开关。 由于该系统对于交通灯及数码管的控制,只用单片机本身的I/O 口就可实现,且本身的计数器及RAM已经够用。

综上所述,选择方案二。 3.1单片机交通控制系统的通行方案设计 设在十字路口,分为东西向和南北向,在任一时刻只有一个方向通行,另一方向禁行,持续一定时间,经过短暂的过渡时间,将通行禁行方向对换。其具体状态如下图所示。说明:黑色表示亮,白色表示灭。交通状态从状态1开始变换,直至状态6然后循环至状态1,周而复始,即如图2.1所示: 图1 交通状态 本系统采用MSC-51系列单片机AT89C51作为中心器件来设计交通灯控制器。实现以下功能:

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

单片机课程设计题目11级1

题目1 电子时钟(LCD显示) 设计要求 以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间: ●使用字符型LCD显示器显示当前时间。 ●显示格式为“时时:分分:秒秒”。 ●用4个功能键操作来设置当前时间,4个功能键接在P1.0~P1.3引 脚上。 功能键K1~K4功能如下。 ●K1—进入设置现在的时间。 ●K2—设置小时。 ●K3—设置分钟。 ●K4—确认完成设置。 程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。 题目2 基于数字温度传感器的数字温度计 设计要求 利用数字温度传感器DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为?55℃~125℃,精确到0.5℃。所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示。 题目3 十字路口交通灯控制 设计要求 设计一个十字路口交通灯控制器。用单片机控制LED模拟交通灯。东西

向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。 本项目为典型的LED显示和中断定时电路。利用定时器T0产生每10ms 一次的中断,每100次中断为1s。对两个方向分别显示红、绿、黄灯,并显示相应的剩余时间。值得注意的是,A方向红灯时间=B方向绿灯时间+黄灯缓冲时间。 题目4 节日彩灯控制器的设计 设计要求 以单片机为核心,设计一个LED显示的节日彩灯控制器,P1.2~P1.5引脚上接有4个按键,4个按键的各自的功能如下: ●P1.2—开始键,按此键则灯开始流动(由上而下)。 ●P1.3—停止键,按此键则停止流动,所有灯为暗。 ●P1.4—上,按此键则灯由上向下流动。 ●P1.5—下,按此键则灯由下向上流动。 本题目本质上是由按键控制功能的流水灯,LED工作的方式通过键盘的扫描实现。其中的LED采取共阳极接法,通过依次向连接LED的I/O口送出低电平,即可实现所要求的功能。 题目5 数字音乐盒的设计 设计要求 以单片机为核心,设计一个数字音乐盒: 利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少3首乐曲,每首不少于30s)。采用LCD显示信息。开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。可通过功能键选择乐曲、暂停、播放。 题目6 单片机控制步进电机 设计要求

基于stc51单片机的LCD1602显示时间_的电子万年历(显示当前温度)

1 课设所需软件简介 1.1 Keil uVision4的简要介绍 2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。新版本支持更多最新的ARM芯片,还添加了一些其他新功能。 2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil uVision4,其编译器、调试工具实现与ARM器件的最完美匹配。 Keil C51开发系统基本知识Keil C51开发系统基本知识 1. 系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 2. Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

单片机课程设计——基于C51简易计算器

单片机双字节十六进制减法实验设计 摘要 本设计是基于51系列的单片机进行的双字节十六进制减法设计,可以完成计 算器的键盘输入,进行加、减、3位无符号数字的简单运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用5个键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus 仿真。 引言 十六进制减法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阴极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单.................................. 一、设计任务和要求

单片机原理与应用课程设计题目2012

《单片机原理与应用》课程设计题目 1.电子秒表 本设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,两个按键,三位数码管显示,打开电源开关后显示8,每秒循环左移一位,即□□8—>□8□—>8□□—>□□8—>…,按A键开始计时,实时显示所经历的时间,按B键停止计时并显示从开始到当前时刻的时间,要求精确到0.1秒,量程为0~99.9秒。 要求按键输入采用中断方式,按键A接INT0,按键B接INT1。 2.智能温控器 本设计以MCS-51系列单片机为核心,采用常用电子器件设计,一个电源开关,两个控制温度设定按键(增大/ 减小),四位数码管分别显示设定温度和实际温度,量程为0~99度,打开电源开关后设定温度值初始化为26度。 按键输入采用中断方式,两个按键分别接INT0和INT1. 采用温度传感器进行温度测量,模数转换采用ADC0809. 单片机根据设定温度S和实测温度P控制继电器R的动作,死区设为2度:当P<=S-1时,控制R接通电加热回路; 当P>S+1时,控制R断开电加热回路; 当S-1

51单片机课程设计 AD转换

课程设计报告 华中师范大学武汉传媒学院 传媒技术学院 电子信息工程2011 仅发布百度文库,版权所有.

AD转换 要求: A.使用单片机实现AD转换 B.可以实现一位AD转换,并显示(保留4位数字)设计框图:

方案设计: AD转换时单片机设计比较重要的实验。模数转换芯片种类多,可以满足不同用途和不同精度功耗等。 外部模拟量选择的是简单的电位器,通过控制电位器来改变模拟电压。显示电压值采用一般的四位七段数码管。而AD转换芯片采用使用最广的ADC0809 ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。 下面说明各引脚功能: ?IN0~IN7:8路模拟量输入端。 ?2-1~2-8:8位数字量输出端。 ?ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。?ALE:地址锁存允许信号,输入端,高电平有效。 ?START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 ?EOC: A/D转换结束信号,输出端,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 ?OE:数据输出允许信号,输入端,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 ?CLK:时钟脉冲输入端。要求时钟频率不高于640KHz。

?REF(+)、REF(-):基准电压。 ?Vcc:电源,单一+5V。 ?GND:地 工作原理: 首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC 变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。 本次实验采用中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。 首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。 采用中断可以减轻单片机负担。并可以使程序有更多的空间作二次开发。

相关文档
相关文档 最新文档