单片机课程设计代码

合集下载

单片机(汇编语言)秒表课程设计设计

单片机(汇编语言)秒表课程设计设计

题目名称:秒表电路设计姓名:班级:学号:指导教师:日期:2016年7月13日《单片机原理及接口技术课程设计》教学大纲课程代码:课程名称:单片机原理及接口技术课程设计周数: 2 学分:1.0学分一、课程设计的性质、任务与目的单片机原理及接口技术课程设计是在学生学习完理论课和实验课的基础上开设的,通过完成一个涉及MCS-51或其他系列单片机多种资源应用并具有综合功能的设计与编程应用,使学生能够将课堂上学到的理论知识与实际应用结合起来,同时在软件编程、仿真调试及相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的设计开发工作打下一定的基础。

本课程设计的主要目的如下:1、增进对单片机的感性认识,加深对单片机理论知识的理解,掌握单片机内部功能模块(如定时/计数器、中断、片内外存贮器、I/O口、串行口等)的应用;2、掌握单片机应用系统的软硬件设计过程及实现方法,为以后设计和实现单片机应用系统打下良好基础;3、提高综合应用所学理论知识独立分析和解决实际问题的能力。

二、本课程设计的基本理论本课程设计的基本理论是单片机原理及接口技术的基本理论,主要包括单片机的硬件结构原理、指令系统、汇编语言、中断系统、定时/计数器、串行接口、I/O接口等。

在学习掌握单片机原理及接口技术课程的前提下,利用实验室提供的单片机实验条件或基于仿真软件,采用汇编语言或C51编程,设计实现一个具体的单片机应用系统项目,熟悉单片机系统设计开发的完整过程。

三、课程设计的方式与基本要求课程设计的方式:每个班级学生按2~3人分为一组,以组为单位进行课程设计(也可一人独立进行),课程设计的题目从教师给定的题目中选取,也可以是指导教师审核通过的学生自选题目。

基本要求:每组选定题目后,按题目要求,首先进行方案论证,通过查阅资料、集体讨论,确定设计方案;然后进行具体的硬件和软件设计;完成设计后,进行硬件/软件调试;最后撰写课程设计报告。

单片机c语言课程设计

单片机c语言课程设计

单片机c语言课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理和结构,理解C语言在单片机编程中的应用。

2. 培养学生运用C语言进行单片机程序设计和调试的能力。

3. 使学生了解单片机外围设备的接口技术,并能结合实际需求进行简单系统设计。

技能目标:1. 培养学生运用Keil等开发工具进行单片机C语言编程,完成程序设计、编译、下载和调试。

2. 培养学生分析问题和解决问题的能力,能够针对实际应用场景设计单片机控制系统。

3. 提高学生的动手实践能力,通过课程设计,独立完成一个具有实际应用价值的单片机控制系统。

情感态度价值观目标:1. 培养学生积极的学习态度,激发对单片机及嵌入式系统开发的兴趣。

2. 培养学生的团队合作意识,学会在项目中进行有效沟通和协作。

3. 增强学生的创新意识,鼓励他们在课程设计中勇于尝试新思路、新技术。

课程性质分析:本课程为单片机C语言课程设计,侧重于实践操作和实际应用,旨在帮助学生将所学理论知识与实际工程相结合,提高解决实际问题的能力。

学生特点分析:学生已具备一定的单片机原理和C语言基础,具有一定的编程和动手能力。

在此基础上,通过课程设计,提高学生的综合应用能力和创新能力。

教学要求:1. 结合课本内容,注重理论与实践相结合,强化学生的动手实践能力。

2. 以项目为导向,引导学生主动探索,培养学生的问题分析和解决能力。

3. 注重团队合作,培养学生的沟通能力和协作精神。

4. 关注学生的个体差异,实施差异化教学,提高全体学生的学习效果。

二、教学内容1. 单片机基础理论:回顾51单片机的结构、原理及其外围设备的工作原理,重点复习I/O口编程、定时器、中断系统等内容。

教材章节:第一章至第三章2. C语言编程基础:巩固C语言基本语法,包括数据类型、运算符、控制语句、函数等,结合单片机编程需求进行讲解。

教材章节:第四章至第六章3. 单片机C语言编程实践:学习使用Keil开发工具进行单片机C语言编程,掌握程序设计、编译、下载和调试的全过程。

单片机课程设计超声波测距设计代码注释

单片机课程设计超声波测距设计代码注释

尊敬的读者:感谢您对本篇文章的关注和阅读。

在本篇文章中,我将为您介绍单片机课程设计中超声波测距设计代码的注释。

希望这些注释能够帮助您更好地理解超声波测距的原理和代码实现。

注释一:引入头文件```c#include <reg52.h>#include <intrins.h>```这里引入了reg52.h和intrins.h两个头文件,reg52.h是51单片机的特殊寄存器及位字段定义,intrins.h包含了一系列嵌入汇编的内置函数,用于单片机的延时等操作。

注释二:定义IO口```csbit Trig = P1^0;sbit Echo = P1^1;```Trig表示超声波发射端的控制引脚,Echo表示超声波接收端的输入引脚。

注释三:延时函数定义```cvoid DelayUs2x(unsigned char t){while (--t);}void DelayMs(unsigned char t){while(t--){DelayUs2x(245);DelayUs2x(245);}}```这里定义了微秒级和毫秒级的延时函数,用于超声波测距模块的操作时序控制。

注释四:超声波测距函数```cunsigned int distance() {unsigned int long ms; Trig = 0;_nop_();_nop_();Trig = 1;DelayUs2x(10);Trig = 0;while(!Echo);ms = 0;while(Echo){DelayUs2x(1);ms++;if(ms > 5000)return 0;}return ms;}```这段代码是超声波测距的核心算法,首先通过Trig引脚发送一个10us的高电平脉冲,然后在Echo引脚接收超声波回波,并计算回波的时间,最后将时间转换成距离值返回。

注释五:主函数```cvoid m本人n(){unsigned int dis;while(1){dis = distance();if(dis){dis = dis * 1.7 / 58;}DelayMs(500);}}```在主函数中,不断调用distance函数获取距离值,然后根据超声波的传播速度将时间转换成距离,并进行延时500ms后再次进行测距。

单片机课程教案

单片机课程教案

单片机课程教案一、课程概述单片机原理及应用是一门涉及微处理器、数字电路和计算机接口技术的综合性课程。

本课程的目标是使学生掌握单片机的原理和应用,了解单片机在嵌入式系统设计中的地位和作用,为学生进一步深入学习和应用单片机打下坚实的基础。

二、课程目标1、理解单片机的内部结构和工作原理。

2、掌握单片机的基本操作和编程方法。

3、熟悉单片机在嵌入式系统中的应用和设计方法。

4、培养学生的创新能力和实践操作能力。

三、课程内容第一章:单片机概述1、1单片机的基本概念及发展历程2、2单片机的特点和应用领域3、3单片机的主要产品和发展趋势第二章:单片机的基本结构和工作原理2、1单片机的内部结构和主要部件功能介绍21、2单片机的引脚和信号说明211、3单片机的存储器和寄存器介绍2111、4单片机的时钟系统和定时器/计数器介绍第三章:单片机的编程语言和开发环境3、1单片机的编程语言概述和特点31、2 C语言在单片机编程中的应用311、3 Keil C51开发环境和程序设计流程介绍3111、4程序调试和下载方法说明第四章:单片机的应用实例和实验指导4、1单片机在LED闪烁和流水灯控制中的应用实例41、2单片机在按键输入和数码管显示中的应用实例411、3单片机在A/D和D/A转换中的应用实例4111、4单片机在电机控制和红外线遥控中的应用实例本文5单片机的实验指导和实验报告要求说明第五章:单片机的发展趋势和应用领域的扩展本文1单片机在物联网和智能家居中的应用扩展本文2单片机在汽车电子和医疗设备中的应用扩展本文3单片机在工业控制和智能制造中的应用扩展本文4单片机在人工智能和机器人技术中的应用扩展第六章:课程总结和答疑解惑本文1课程总结和学习方法分享本文2答疑解惑和常见问题解答1、3学生自我评估和改进建议收集四、教学方法与手段本课程采用理论教学和实践操作相结合的方法,以案例分析和程序示范为主要手段,通过课堂讲解、小组讨论、实验指导等多种形式,使学生更好地理解和掌握单片机的原理和应用。

单片机课程设计密码锁程序和仿真图

单片机课程设计密码锁程序和仿真图

#include<at89x51.h>#define uchar unsigned char#define uint unsigned intuint num=10; //开始让数码管什么都不显示bit set=0; //定义设置密码的位char count=-1; //开始让COUNT=-1,方便后面显示数码管sbit Beep=P1^2; //蜂鸣器uchar temp;uchar pws[6]={3,6,2,3,3,0}; //原始密码uchar pwx[6]; //按下的数字存储区bit rightflag; //密码正确标志位uchar workbuf[6];uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40 }; //段选码,共阴极uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //位选码uint keyscan();void delay(uchar z) //延时,ms级{uchar y;for(;z>0;z--)for(y=120;y>0;y--);}void setpw() //设置密码函数{keyscan();}uint keyscan() //键盘扫描函数{P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5); //键盘去抖,最好ms以上,这里用了mstemp=P3;temp=temp&0xf0;if(temp!=0xf0){count++;//按键计数加temp=P3;switch(temp){case 0xee:{num=7;if(count<6) //六位密码,所以COUNT<6{if(set==0) //设置密码键没有按下时pwx[count]=num; //存储按下的数字elsepws[count]=num; //设置密码键按下时,设置新密码workbuf[count]=tabledu[11]; //相应位的数码管显示"--",不显示相应的数字,密码是保密的}}break;case 0xde:{num=8;if(count<6) //以下扫描键盘的原理差不多同上{if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;case 0xbe:{num=9;{if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}}break;case 0x7e: //设置密码键按下{set=1; //设置密码标志位置P1_3=0; //设置密码指示灯亮workbuf[0]=0x00;//数码管第一位不显示workbuf[1]=0x00;//......workbuf[2]=0x00;//......workbuf[3]=0x00;workbuf[4]=0x00;workbuf[5]=0x00;//......count=-1; //按键计数复位为-1if(count<6) //密码没有设置完,继续设置密码{setpw(); //设置密码}}break;}while(temp!=0xf0) //按键抬起检测{temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){count++;temp=P3;switch(temp){case 0xed:{num=4;if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;case 0xdd:{num=5;if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;case 0xbd:{num=6;if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){count++;temp=P3;switch(temp){case 0xeb:{num=1;if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;case 0xdb:{num=2;if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;case 0xbb:{num=3;if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(5);temp=P3;temp=temp&0xf0;if(temp!=0xf0){count++;temp=P3;switch(temp){case 0xd7:{num=0;if(count<6){if(set==0)pwx[count]=num;elsepws[count]=num;workbuf[count]=tabledu[11];}}break;case 0xe7: num=20;break; //确定键按下检测case 0x77: //复位键或者输入密码全部一次删除{P1_1=0; //锁关P1_3=1; //密码设置指示灯灭set=0; //不设置密码num=10; //num复位count=-1; //COUNT复位workbuf[0]=tabledu[10]; //第一位数码管不显示workbuf[1]=tabledu[10]; //第二位数码管不显示workbuf[2]=tabledu[10];workbuf[3]=tabledu[10];workbuf[4]=tabledu[10];workbuf[5]=tabledu[10]; //......P1_0=1; //锁关}break;case 0xb7: //输入密码删除键(一位一位删除){count--;workbuf[count]=0x00; //因确定键按下时,COUNT也会加,而确定键不是密码,所以这里是COUNT,而不是COUNT+1count--; //因确定键按下时,确定键不是密码,COUNT也会加,这里COUNT再自减if(count<=-1)count=-1;}break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}return(num);}void init() //利用定时显示数码管{TMOD=0x01;TH0=(65536-500)/200;TL0=(65536-500)%200;ET0=1;EA=1;TR0=1;}bit compare() //密码比较函数{if((pwx[0]==pws[0])&(pwx[1]==pws[1])&(pwx[2]==pws[2])&(pwx[3]==pws[3])&(pwx[4]==pws[4])&(pw x[5]==pws[5]))rightflag=1;elserightflag=0;return(rightflag);}void main(){uint i,j;init();P0=0;P1_1=0; //锁关while(1){keyscan();if(num==20) //如果确定键按下(修改密码和输入密码共用的确定键){if(count==6){if(set==1) //修改密码确定{P1_3=1;workbuf[0]=0;workbuf[1]=0;workbuf[2]=0;workbuf[3]=0;workbuf[4]=0;workbuf[5]=0;}else//输入密码确定{set=0;compare();if(rightflag==1) //如果密码正确{P1_0=0; //锁开P1_1=1;workbuf[0]=tabledu[8]; //数码管第一位显示"8"workbuf[1]=tabledu[8]; //数码管第二位显示"8"workbuf[2]=tabledu[8];workbuf[3]=tabledu[8];workbuf[4]=tabledu[8];workbuf[5]=tabledu[8]; //......}else{P1_1=0; //锁仍然是关workbuf[0]=0X71; //数码管第一位显示"F"workbuf[1]=0X71;workbuf[2]=0X71;workbuf[3]=0X71;workbuf[4]=0X71;workbuf[5]=0X71; //......for(i=0;i<1000;i++) //密码错误报警{for(j=0;j<80;j++);Beep=~Beep;}break;}}}else//若输入的密码位数不为位时{P1_1=0; //锁仍然关workbuf[0]=0X71; //数码管第一位显示"F"workbuf[1]=0X71;workbuf[2]=0X71;workbuf[3]=0X71;workbuf[4]=0X71;workbuf[5]=0X71;for(i=0;i<1000;i++){for(j=0;j<80;j++);Beep=~Beep;}break;}}}}void timer0() interrupt 1 //显示数码管{uchar i;TH0=(65536-500)/200; TL0=(65536-500)%200; for (i=0;i<6;i++) { P0=workbuf[i]; P2=tablewe[i]; delay(5); P0=0;}}XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51234567891RP1RESPACK-812365489=7+CONABCD1243D2LED-RED锁开锁关LS1SOUNDERD3LED-BLUE设置密码指示灯R11kR21kR310KR410K+12VQ3TIP127Q4TIP127Q18050Q28050Q5TIP122Q6TIP122+88.8Amps+88.8Amps+88.8Volts。

给单片机课程设计1

给单片机课程设计1

电子信息系课程设计方案
一.课程设计名称:单片机课程设计
二.课程编号:031421
三.课程性质:(实践教学)必修课
四.开课专业:电子信息科学与技术、通信工程、自动化、微电子五.开课班级:11级1-14班
六.学生人数:411人
七.课程总学时数:80学时(2周)
八.开课学期:2013-2014学年第1学期
九.开课具体时间:
1.第1轮:1-8班,第12周-第14周周六、周日1-11节,15周周六
1-11节,1-4班15周周二9-11节,9-12班15周周一9-11节。

2.第2轮:9-14班,第15周周日1-11节,第16、17周周一、二、
三、五9-11节,周六、周日1-11节。

开课地点:
第1轮
1. 实验楼321(上机)、425(焊接),1、2班。

2. 实验楼329(上机)、328(焊接),3、4班。

3. 实验楼330(上机)、331(焊接),5、6班。

4. 实验楼429(上机)、426(焊接),7、8班。

第2轮
1. 实验楼429(上机)、426(焊接),9、10班。

2.实验楼329(上机)、328(焊接),11、12班。

3. 实验楼330(上机)、331(焊接),13、14班。

十.指导教师名单
第1轮
第2轮
十一. 排课课表
(说明:排课课表应按照以下示例列出参与课程设计的每位老师的具体授课时间和地点。

请大家注意:课程设计的排课不允许与该老师所带的其他理论课及实验课的课程时间冲突)
(下列时间请各位课程设计负责人及指导教师签字确认)
课程设计负责人:
系内审核:
日期:年月日。

单片机课程设计实验报告+基于单片机的数字时钟+含完整实验代码

单片机课程设计实验报告+基于单片机的数字时钟+含完整实验代码

单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的4个LED数码管,设计带有闹铃、秒表功能的数字时钟。

功能要求:a)计时并显示(LED)。

由于实验板上只有4位数码管,可设计成显示“时分”和显示“分秒”并可切换。

b)时间调整功能。

利用4个独立按钮,实现时钟调整功能。

这4个按钮的功能为工作模式切换按钮(MODE),数字加(INC),数字减(DEC)和数字移位(SHITF)。

c)定闹功能。

利用4个独立按钮设定闹钟时间,时间到以蜂鸣器响、继电器动作作为闹铃。

d)秒表功能。

最小时间单位0.01秒。

二、硬件原理分析1.电源部分电源部份采用两种输入接口(如上图)。

a)外电源供电,采用2.1电源座,可接入电源DC5V,经单向保护D1接入开关S1。

b)USB供电,USB供电口输入电源也经D1单向保护,送到开关S1。

注:两路电源输入是并连的,因此只选择一路就可以了,以免出问题。

S1为板子工作电源开关,按下后接通电源,提供VCC给板子各功能电路。

电路采用两个滤波电容,给板子一个更加稳定的工作电源。

LED为电源的指示灯,通电后LED灯亮。

2.蜂鸣器蜂鸣器分为有源和无源两种,有源即两引脚有一个直流电源就可以长鸣,无源则需要一个1K左右的脉冲才可以蜂鸣,因此对于按键的提示音及报警蜂鸣使用有源来得方便。

有源也可以当无源使用,而无源则不能当有源使用,当然用有源蜂鸣器作音乐发声会失真厉害。

如上图:单片机P15输出高低电平经R21连接三极管B极,控制三极管的导通与截止,从而控制蜂鸣器的工作。

低电平时三极管导通,蜂鸣器得电蜂鸣,高电平时三极管截止,蜂鸣器失电关闭蜂鸣。

电路使用一个四位共阳型数码管,四个公共阳级由三极管放大电流来驱动,三极管由P10-P13控制开与关。

数码管的阴级由P0口经过电阻限流连接。

例如,要十位的数码管工作,P12输出0,使三极管Q12导通,8脚得电,当P0口相应位有输出0时,点亮相应的LED灯组合各种字符数字。

PIC单片机课程设计 - 三位倒计时器(含全部汇编程序清单)

PIC单片机课程设计 - 三位倒计时器(含全部汇编程序清单)

课程设计报告课程名称:单片机原理与接口技术课程设计设计题目:三位倒计时器院系:机电工程学院班级:2012级电气工程及其自动化专业姓名:XXX学号:2012XXXX指导教师:XXXX设计时间:2014年X月X日出勤实物报告总分目录前言 (1)第一章设计方案 (1)1.1 设计内容及要求 (1)1.1.1 设计内容 (1)1.1.2设计要求 (1)1.1.3功能设计 (2)1.2硬件设计 (2)1.2.1 矩阵键盘电路设计 (2)1.2.2数码管电路设计 (3)1.2.3 LED及蜂鸣器电路设计 (4)1.2.4单片机主电路设计 (4)1.2.5上电电路的设计 (5)1.2.6总电路图 (5)1.3总体方案 (6)第二章软件设计 (7)2.1 倒计时部分 (7)2.1.1 键盘扫描子程序 (8)2.1.2 0到9按键功能子程序和键盘显示子程序 (9)2.1.3 一位转多位十进制子程序 (12)2.1.4 TMR0中断服务子程序 (13)2.1.5 倒计时显示子程序 (15)2.2 附加功能部分 (15)2.2.1 暂停和继续 (16)2.2.2 计数功能 (17)2.2.3 复位和归零 (17)2.3 结束提示部分 (18)2.4 程序部分总结 (18)第三章实物照片 (19)3.1 实验板照片 (19)3.2 脱机运行照片 (19)第四章问题与体会 (21)结论 (22)参考文献 (23)附录:程序清单 (24)前言此次课程设计的内容为三位数的倒计时器的设计。

目前倒计时器的发展已经相当先进,我做这次设计的主要目的是想更进一步了解基本电路的设计流程,以提高自己的设计理念,使自己的动手动脑能力有更进一步提高。

通过解决现实生活中的问题,巩固和加深单片机课程中所学的理论知识和实验能力,加深对单片机软硬件知识的理解,以获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。

本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,能够提高自己的动手能力和设计能力,以培养自己的创新能力,做到理论和实践相结合。

单片机课程设计_基于89C51的数字音乐盒设计

单片机课程设计_基于89C51的数字音乐盒设计

单片机系统课程设计成绩评定表设计课题基于89C51的数字音乐盒设计设计学院名称:电气工程学院专业班级:学生姓名:学号:指导教师:设计地点:设计时间:单片机系统课程设计课程设计名称:基于89C51的数字音乐盒设计专业班级:学生姓名:学号:指导教师:课程设计地点:课程设计时间:单片机系统课程设计任务书目录引言 (5)1 概述 (5)2 系统总体方案设计 (5)2.1硬件组成 (5)2.2.方案论证。

(6)2.3音乐盒的功能图用框图表示 (7)3硬件电路设计 (7)3.1单片机电路 (7)3.2 晶振电路 (8)3.3复位电路 (8)3.4键盘 (9)3.5蜂鸣器电路 (9)3.6 LCD液晶电路 (10)3.7电源电路 (11)4 软件设计 (11)4.1 音调、节拍、及编码的设置 (11)4.1.1音调 (11)4.1.2节拍的确定 (13)4.2 (15)4.3播放音乐子程序流程图(包含了键盘扫描) (16)4.4定时器0中断服务子程序框图: (16)5,调试 (17)5.1 检查硬件连接 (17)5.2 检查软件系统 (17)5.2.1. (17)5.2.2. (18)5.3测试结果 (18)5.3.1整体运行图 (18)5.3.2LED灯运行图 (19)6 总结 (19)7参考文献 (20)附录A (20)附录B (21)引言在电子信息技术飞速发展的今天,现代电子产品几乎渗透了社会的各个领域,它不仅推动了社会的进步,而且为我们的生活带来了诸多的便利。

由于人们生活质量的提高,人们对视觉、听觉方面的享受提出了越来越高的要求。

小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。

传统音乐盒多是机械型的,体积笨重,发音单调,可以选择的曲目较为单一。

本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,它体积小,重量轻,可以随心添加自己喜欢的音乐,外观效果多彩,使用方便,并且具有一定的商业价值。

stm32单片机课程设计

stm32单片机课程设计

stm32单片机课程设计一、课程目标知识目标:1. 理解STM32单片机的基本结构和原理,掌握其内部外设的配置和使用方法;2. 学会使用C语言对STM32单片机进行编程,掌握中断、定时器等基础应用;3. 了解STM32单片机在嵌入式系统中的应用和开发流程。

技能目标:1. 能够独立完成STM32单片机的硬件连接和软件编程;2. 培养学生运用单片机解决实际问题的能力,如设计简单的温度控制器、智能家居系统等;3. 提高学生的动手实践能力和团队协作能力。

情感态度价值观目标:1. 激发学生对电子技术和嵌入式系统开发的兴趣,培养其探索精神和创新意识;2. 培养学生严谨的科学态度和良好的学习习惯,使其具备一定的自主学习能力;3. 增强学生的国家意识,认识到我国在单片机领域的发展成果,提高民族自豪感。

本课程针对高年级学生,在已有电子技术基础和C语言编程能力的基础上,进一步深入学习STM32单片机的相关知识和技能。

课程注重理论与实践相结合,以项目为导向,培养学生解决实际问题的能力。

课程目标的设定旨在使学生在掌握专业知识的同时,提高实践操作能力和团队合作精神,为我国嵌入式系统领域培养优秀的人才。

二、教学内容1. STM32单片机概述:介绍STM32单片机的特点、结构及应用领域,对应教材第一章。

- 单片机发展历程及STM32系列简介- STM32单片机的内部结构及外设2. 开发环境搭建:学习STM32单片机的开发工具及环境配置,对应教材第二章。

- Keil uVision开发环境安装与使用- STM32CubeMX软件介绍及使用方法3. 基础编程:掌握STM32单片机的C语言编程基础,对应教材第三章。

- GPIO编程- 中断与定时器编程- 串口通信编程4. 硬件设计:学习STM32单片机硬件连接与外设驱动设计,对应教材第四章。

- 硬件电路设计基础- 常用外设驱动编写(如LED、LCD、电机等)5. 实践项目:设计并实现一个基于STM32单片机的温度控制器,对应教材第五章。

c51的简易计算器-单片机课程设计

c51的简易计算器-单片机课程设计

单片机课程设计题目名称基于51单片机的简易计算器学生学院____ 信息工程学院_______专业班级信息工程(应用电子方向)12(2)班姓名______虞君权__________学号**********指导教师_ _____李优新 ___2015年1月151一、课程设计的内容本次课程设计的内容从下面两个方面任选一个:一是在学院的单片机实验平台上进行,开发一个基于单片机与PWM技术的灯光调节系统,主要开发内容为按键定义、输入与防抖动技术、PWM调节技术以及显示技术等程序设计。

二是利用51系列单片机及必要的外围芯片、输入输出等接口电路设计开发一个简易的单片机系统,在此基础上,自行设计一个单片机应用程序来实现一些实用的功能。

通过这些内容的设计、开发、安装、调试等一系列工作,熟练掌握单片机系统的开发流程与工作机理,加深对所学课程知识的理解与把握,为将来相关的研究开发工作打下坚实的基础。

二、设计内容本次实验的任务就是要以51系列单片机为核心实现一个简易计算器计算器,它的结构非常简单,外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成,通过软件编程可实现简单加减乘除。

三、方案论证经分析,计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。

具体如下:⒈)LCD显示电路LCD1602作为一个成熟的产品,使用简单,模式固定,便于移植到各种类型的程序,但是初学者往往要注意结合LCD本身的时序图来完善初始化程序。

又以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,故采用LCD.⒉)4*4键盘扫描电路(中断式,扫描式,反转式)用户设计行列键盘接口,一般常采用 3 种方法读取键值。

一种是中断式,外两种是扫描法和反转法。

中断式:在键盘按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个案件被按下。

本实验采用中断式实现用户键盘接口。

扫描法:对键盘上的某一行送低电平,其他行为高电平,然后读取列值。

单片机技术课程设计--彩灯控制器的设计

单片机技术课程设计--彩灯控制器的设计

电气信息学院单片机技术课程设计报告课题名称彩灯控制器的设计专业班级 09电气01班学号 0903120222 学生姓名严娟指导教师易先军评分2012年6月12日至6月19日课程设计量化评分标准指导老师评语:答辩记录1、例举设计过程中遇到的问题及其解决方法(至少两例)。

答:(1)问题说明:解决方法:(2)问题说明:解决方法:2、教师现场提的问题记录在此(不少于2个问题)。

答:摘要本文介绍了一种简易LED彩灯控制系统的软硬件设计过程,本方案以AT89C51单片机作为主控核心,按键控制电路、彩灯显示电路以及单片机最小系统等模块组成的核心主控制电路。

利用软件编程烧录程序到单片机来实现对LED 彩灯进行控制,本系统亮灯模式多,用户根据操作提示可以随意变换想要的闪烁方式和控制彩灯的闪烁频率,还可以全自动运行。

系统利用汇编语言开发,并在软硬件设计中分别使用了Proteus 、keilC51开发平台。

本系统具有电路结构简单、易操作、硬件少、体积小、成本低、低能耗等优点,具有一定的实用和参考价值。

关键词:单片机;LED彩灯;汇编语言;Proteus;keilC51;目录第1章设计任务 (1)第2章设计方案 (2)2.1设计方案 (2)2.2方案选择 (3)第3章硬件设计 (4)3.1直流稳压电源电路 (4)3.2单片机最小系统 (4)3.3LED彩灯显示电路 (5)3.4按键控制电路 (6)第4章软件设计 (8)4.1主程序设计 (8)4.2自动模式程序设计 (9)4.3延时程序设计 (10)4.3中断子程序设计 (10)第5章仿真与性能分析 (11)5.1 系统仿真过程 (11)5.2 仿真结果与分析 (12)第6章设计小结 (15)参考文献 (16)附录1LED彩灯控制系统仿真电路图 (17)附录2LED彩灯彩灯控制程序代码 (18)第1章设计任务当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。

51单片机的课程设计

51单片机的课程设计

51单片机的课程设计一、课程目标知识目标:1. 理解51单片机的硬件结构,掌握其工作原理;2. 学会使用51单片机的开发环境,掌握基本的编程语法和技巧;3. 掌握51单片机中断、定时器、串行通信等模块的应用;4. 了解51单片机在嵌入式系统中的应用,培养对单片机应用场景的认识。

技能目标:1. 能够独立设计简单的51单片机程序,完成基础的控制任务;2. 能够运用51单片机解决实际问题,具备一定的编程调试能力;3. 能够阅读和分析51单片机的相关资料,提高自学能力和技术文献阅读能力。

情感态度价值观目标:1. 培养学生对单片机技术的兴趣,激发学生探索嵌入式领域的热情;2. 培养学生的团队合作意识,提高沟通与协作能力;3. 引导学生关注我国单片机技术的发展,增强学生的民族自豪感;4. 培养学生严谨、细致、负责的学习态度,养成良好的编程习惯。

课程性质:本课程为实践性较强的学科,旨在通过51单片机的学习,让学生掌握基本的单片机原理和编程技能,培养实际操作和解决问题的能力。

学生特点:学生具备一定的电子基础和编程基础,对单片机有一定了解,但实践经验不足。

教学要求:结合学生特点和课程性质,注重理论与实践相结合,以实例教学为主,培养学生动手实践能力。

同时,关注学生的情感态度价值观培养,激发学生的学习兴趣和探究欲望。

在教学过程中,将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 51单片机硬件结构:介绍51单片机的内部结构、引脚功能、工作原理等,结合教材第二章内容进行讲解。

- 微控制器原理- 51单片机引脚功能- 时钟与复位电路2. 开发环境与编程工具:学习51单片机的开发环境搭建,掌握编程工具的使用。

- Keil C51集成开发环境安装与配置- 51单片机程序编写、编译与下载3. 51单片机编程语言:学习单片机C语言编程基础,掌握基本语法和编程技巧。

- C语言基础语法- 特定寄存器的操作与编程4. 中断与定时器:学习中断系统、定时器的工作原理和应用实例。

单片机课程设计——温度监控系统

单片机课程设计——温度监控系统

单片机课程设计报告题目:温度监控系统设计学院:通信与信息工程学院专业:电子信息工程专业班级:电信xxxx班成员: XXXXXXXXX二〇一一年七月十二日一、引言温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。

对于不同场所、不同工艺、所需温度高低范围不同、精度不同,则采用的测温元件、测方法以及对温度的控制方法也将不同;产品工艺不同、控制温度的精度不同、时效不同,则对数据采集的精度和采用的控制算法也不同,因而,对温度的测控方法多种多样。

随着电子技术和微型计算机的迅速发展,微机测量和控制技术也得到了迅速的发展和广泛的应用。

利用微机对温度进行测控的技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性。

作为获取信息的手段——传感器技术得到了显著的进步,其应用领域较广泛。

传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。

因此,了解并掌握各类传感器的基本结构、工作原理及特性是非常重要的。

为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。

本系统利用传感器与单片机相结合,应用性比较强,本系统可以作为仓库温度监控系统,如果稍微改装可以做热水器温度调节系统、实验室温度监控系统,以及构成智能电饭煲等等。

课题主要任务是完成环境温度监测,利用单片机实现温度监测并通过报警信号提示温度异常。

本设计具有操作方便,控制灵活等优点。

本设计系统包括单片机,温度采集模块,显示模块,按键控制模块,报警和指示模块五个部分。

文中对每个部分功能、实现过程作了详细介绍。

整个系统的核心是进行温度监控,完成了课题所有要求。

二、实验目的和要求2.1学习DS18B20温度传感芯片的结构和工作原理。

2.2掌握LED数码管显示的原理及编程方法。

2.3掌握独立式键盘的原理及使用方法。

2.4掌握51系列单片机数据采集及处理的方法。

MSP430单片机课程设计-简单计算器设计

MSP430单片机课程设计-简单计算器设计
2
MSP430 单片机课程设计
unsigned char disbuff[8] = {20,20,0,0,0,0,0,0};//初始数码管 unsigned char getkey(void); unsigned int qiushu(); void clear(void); void zhuanhuan(); void delay(unsigned int j) { for(uint i=0;i<j;i++); } unsigned int qiushu() //转化成相应的十进制整数 {unsigned int y; y=disbuff[2]*100000+disbuff[3]*10000+disbuff[4]*1000+disbuff[5]*100 +disbuff[6]*10+disbuff[7]; return y; } void clear(void) {unsigned int a; for(a=7;a>1;a--) disbuff[a]=0; } //清除屏幕
实验二:猜数字游戏设计
一、目的
利用单片机芯片 MSP430x14x、四位八段共阴数码管,设计一个猜数字游戏, 并将游戏结果显示在数码管上。
二、功能
要求该设计能实现如下的功能:游戏开始后,先在程序内随即设定四个 0-9 之间的不同数,作为游戏数答案。然后用户给出 4 个数,该软件会将您提交的数 与它自动产生的数进行比较,结果在八段数码管上显示成"kAsB"。k 代表位置正 确数字也正确的字数,s 代表数字正确但位置不正确的字数。当 k=4 且 s=0 时, 则比较正确显示“GOOD” ,进行下一次比较。
4
MSP430 单片机课程设计

c51单片机课程设计

c51单片机课程设计

c51单片机课程设计一、课程目标知识目标:1. 理解C51单片机的基本原理与结构,掌握其指令系统及编程方法。

2. 学会使用C51单片机进行简单的电路设计与控制系统实现。

3. 了解C51单片机在嵌入式系统中的应用,掌握相关外围电路的设计与调试。

技能目标:1. 能够运用C语言编写简单的C51单片机程序,完成基础控制功能。

2. 熟练使用Keil、Proteus等软件进行C51单片机程序的编译、仿真与调试。

3. 能够分析并解决C51单片机在实际应用中遇到的问题,具备一定的故障排查能力。

情感态度价值观目标:1. 培养学生对电子技术及嵌入式系统的兴趣,激发其创新意识与探索精神。

2. 强化学生的团队合作意识,培养其在项目实践中的沟通与协作能力。

3. 培养学生严谨、务实的科学态度,使其认识到技术对社会发展的积极作用。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程为电子技术领域的一门实践性课程,旨在培养学生的编程能力、电路设计能力及实际操作能力。

2. 学生特点:学生已具备一定的电子技术基础,具有较强的学习兴趣和动手能力,但对复杂编程及实际应用尚存一定难度。

3. 教学要求:注重理论与实践相结合,充分调动学生的积极性与主动性,提高其在实际项目中的应用能力。

二、教学内容1. C51单片机原理与结构:介绍C51单片机的硬件结构、工作原理及性能特点,对应教材第一章内容。

- 单片机内部结构- 指令系统与执行过程- 性能参数与选型2. C51单片机编程基础:学习C语言编程,掌握C51单片机程序设计方法,对应教材第二章内容。

- 数据类型、运算符与表达式- 控制语句与函数- 汇编与C语言混合编程3. C51单片机外围电路设计:学习常用外围电路的设计方法,如键盘、显示、传感器等,对应教材第三章内容。

- 键盘电路设计- 显示器接口设计- 传感器信号处理4. C51单片机应用实例:通过实际案例,学习C51单片机在嵌入式系统中的应用,对应教材第四章内容。

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

陈新 2014/7/21 17:32:03QQ可以找到历史记录的陈新 17:33:15无痕的回忆 17:01:52LED_LOOP: MOV R1, #251 ;1s的显示延时(好奇怪,居然不准)LED_LOOP_1: MOV R4, #14 ;使用了寄存器R1,R4(估计可以使用堆栈临时释放)LED_LOOP_2: LCALL DISPLAY_MOVEDJNZ R4, LED_LOOP_2DJNZ R1, LED_LOOP_1RET无痕的回忆 23:10:36ORG 0000HAJMP MAINORG 0030HHC595_SCK BIT P0.4HC595_RCK BIT P0.5HC595_RST BIT P0.6HC595_DAT BIT P0.7MAIN: MOV A, #00HMOV P0, ACLR HC595_RSTLOOP0: MOV R0, #0LOOP1: MOV R1, #100LOOP2: MOV R4, #10LOOP3: LCALL DISPLAYDJNZ R4, LOOP3DJNZ R1, LOOP2INC R0LJMP LOOP1DELEY0: MOV R6, #4 ;1ms延时的子程序DELEY1: MOV R7, #123DELEY2: DJNZ R7, DELEY2DJNZ R6, DELEY1NOPRETDISPLAY: MOV A, R0 MOV B, #100DIV ABMOV B, #10DIV AB;MOV A, #0LCALL SHOW_NUM MOV A, P0ANL A, #0F0HORL A, #1MOV P0, A ;延时LCALL DELEY0 ;延时LCALL DELEY0MOV A, R0 ;有问题MOV B, #100DIV AB;MOV A, #7LCALL SHOW_NUM MOV A, P0ANL A, #0F0HORL A, #2MOV P0, A ;延时LCALL DELEY0 ;延时LCALL DELEY0MOV A, R0MOV B, #100DIV ABXCH A, BMOV B, #10DIV AB;MOV A, #7LCALL SHOW_NUM MOV A, P0ANL A, #0F0HORL A, #4MOV P0, ALCALL DELEY0 ;延时LCALL DELEY0 ;延时MOV A, R0MOV B, #10DIV AB;MOV A, #7LCALL SHOW_NUMMOV A, P0ANL A, #0F0HORL A, #8MOV P0, ALCALL DELEY0 ;延时LCALL DELEY0RETSHOW_NUM: MOV DPTR, #SEGMOVC A, @A+DPTRLCALL SEND_BYTERETSEND_BYTE: MOV R2, #8 ;注意这个循环次数控制,有误差则会影响数码管显示MOV R6, #01HSEND_LOOP: MOV R3, AANL A, R6JZ ZEROJNZ NZEROZERO: CLR HC595_DATAJMP NEXTNZERO: SETB HC595_DATNEXT: SETB HC595_SCKCLR HC595_SCKMOV A, R6RL AMOV R6, AMOV A, R3DJNZ R2, SEND_LOOPCLR HC595_RCKSETB HC595_RCKRETSEG: DB 0FCHDB 60HDB 0DAHDB 0F2HDB 66HDB 0BEHDB 0E0HDB 0FEHDB 0F6HEND无痕的回忆 23:10:04int8u tab_abc[] = {0xee, 0x3e, 0x9c, 0x7a, 0x9e, 0x8e};罐头 17:36:46还有那个循环的呢陈新 18:18:36已经发给你了啊DISPLAY: MOV A, KEY ;将KEY转移给ALCALL SHOW_NUMMOV P0, #0FFH ;打开所有的数码管即设置为静态显示MOV P0, ALCALL DELAY_1MS ;延时注意到在动态显示中,点亮每位数码管都需要2秒钟LCALL DELAY_1MS ;延时。

LCALL DELAY_1MS ;延时。

RETDISPLAY: MOV A,KEYMOV B, #100DIV ABMOV B, #10DIV AB;MOV A, #0LCALL SHOW_NUMMOV A, P0ANL A, #0F0HORL A, #1MOV P0, A ;延时LCALL DELAY_1MS ;延时LCALL DELAY_1MSMOV A, KEY ;有问题MOV B, #100DIV AB;MOV A, #7LCALL SHOW_NUMANL A, #0F0HORL A, #2MOV P0, A ;延时LCALL DELAY_1MS ;延时LCALL DELAY_1MSMOV A, KEYMOV B, #100DIV ABXCH A, BMOV B, #10DIV AB;MOV A, #7LCALL SHOW_NUMMOV A, P0ANL A, #0F0HORL A, #4MOV P0, ALCALL DELAY_1MS;延时LCALL DELAY_1MS;延时MOV A, KEYMOV B, #10DIV ABXCH A, B;MOV A, #7LCALL SHOW_NUMMOV A, P0ANL A, #0F0HORL A, #8MOV P0, ALCALL DELAY_1MS ;延时LCALL DELAY_1MSRETDISPLAY: MOV A, KEY ;将KEY转移给ALCALL SHOW_NUMMOV A, P0 ;打开所有的数码管即设置为静态显示ANL A,#0F0H;ORL A, #15;MOV P0, ALCALL DELAY_1MS ;延时注意到在动态显示中,点亮每位数码管都需要2秒钟LCALL DELAY_1MS ;延时。

RETDISPLAY: MOV A, KEY ;将KEY转移给A; LCALL SHOW_NUMMOV DPTR, #SEGMOVC A, @A+DPTRMOV P0, ALCALL DELAY_1MS ;延时注意到在动态显示中,点亮每位数码管都需要2秒钟LCALL DELAY_1MS ;延时。

RETSEG: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH7.26课程设计最终版代码;---------------------------------------------------------------------;---------------------------------------------------------------------;************华南理工大学电子与信息学院信息工程2班**************;************ ************** ;************ 第二组************** ;************ ************** ;************ 高文冠刘翠玲王志健**************;************ ************** ;************ 单片机课程设计**************;---------------------------------------------------------------------;---------------------------------------------------------------------; --------------------------------------------------------------------;分配各地址;---------------------------------------------------------------------KEY EQU 40HAJMP STARTORG 0003H ; 入口地址AJMP JINT0 ;外部中断0入口ORG 0013H ;AJMP JINT1 ; 外部中断1入口地址ORG 0030H ;; --------------------------------------------------------------------;定义这个实验中所需要的管脚,其中HCHC595是八位移位寄存器,BEEP是蜂鸣器;---------------------------------------------------------------------HC595_SCK BIT P0.4HC595_RCK BIT P0.5HC595_RST BIT P0.6HC595_DAT BIT P0.7BEEP BIT P1.3 ;定义蜂鸣器的管脚; --------------------------------------------------------------------;程序以及初始化硬件代码,主要是对中断以及一些端口进行初始化;---------------------------------------------------------------------START: MOV A,#00H ;先将数码管的所有段均置0,即都不选; SETB BEEP ;关闭蜂鸣器MOV P0, ACLR HC595_RSTMOV SP,#60H ;堆栈地址为60HSETB EA ;允许全局中断SETB EX0 ; 允许外部中断0SETB EX1 ; 允许外部中断1SETB PX1 ;设外部中断1为高优先级SETB IT1 ; 设外部中断1边沿触发CLR IT0 ; 设外部中断0低电平触发; --------------------------------------------------------------------;判断是否按键按下,并且赋予键值的键盘扫描代码;---------------------------------------------------------------------GWG0: NOPMOV P2,#0FFH ; 判第0行是否有键按下CLR P2.0 ; 将P2.0清零MOV A,P2ANL A,#0F0H ; 屏蔽低4位,即消除行线的影响XRL A,#0F0HJZ NOKEY0 ;A为0,转向NOKEY0LCALL DELAY_10MS ; 延时,去抖动MOV A,P2 ; 再确认一次ANL A,#0F0HXRL A,#0F0HJZ NOKEY0 ; A为0,转向NOKEY0,表示第一行没有按键按下MOV A,P2 ; 判哪一个键按下ANL A,#0F0HCJNE A,#0E0H,NEXT1MOV KEY,#0 ; 按下的键值是0LCALL DISPLAY ;根据按键在数码管上和LED上显示键值LJMP GWG0 ;继续检测NEXT1: CJNE A,#0D0H,NEXT2MOV KEY,#1 ; 按下的键值是1LCALL DISPLAYLJMP GWG0 ;继续检测NEXT2: CJNE A,#0B0H,NEXT3MOV KEY,#2 ; 按下的键值是2LCALL DISPLAYLJMP GWG0 ;继续检测NEXT3: CJNE A,#70H,NOKEY0MOV KEY,#3 ;按下的键值是3LCALL DISPLAYLJMP GWG0 ;继续检测NOKEY0: MOV P2,#0FFH ; 判第1行是否有键按下CLR P2.1 ; 将P2.1清零MOV A,P2ANL A,#0F0H ;屏蔽低4位,即行线的影响XRL A,#0F0HJZ NOKEY1 ;A为0,转向NOKEY1LCALL DELAY_10MS ;延时,去抖动MOV A,P2 ; 再确认一次ANL A,#0F0HXRL A,#0F0HJZ NOKEY1 ;A为0,转向NOKEY1MOV A,P2 ;判断哪个按键按下ANL A,#0F0HCJNE A,#0E0H,NEXT5MOV KEY,#4 ;按下的键值是4LCALL DISPLAY ;根据按键在数码管上和LED上显示键值LJMP GWG0 ; 继续检测NEXT5: CJNE A,#0D0H,NEXT6MOV KEY,#5 ; 按下的键值是5LCALL DISPLAYLJMP GWG0 ; 继续检测NEXT6: CJNE A,#0B0H,NEXT7MOV KEY,#6 ;按下的键值是6LCALL DISPLAYLJMP GWG0 ; 继续检测NEXT7: CJNE A,#70H,NOKEY1MOV KEY,#7 ;按下的键值是7LCALL DISPLAYLJMP GWG0 ; 继续检测NOKEY1: MOV P2,#0FFH ;判第2行是否有键按下CLR P2.2 ;将P2.2清零MOV A,P2ANL A,#0F0H ;屏蔽掉低四位,即消除行线的影响XRL A,#0F0HJZ NOKEY2 ;A为0,转向NOKEY2LCALL DELAY_10MS ;延时,去抖动MOV A,P2 ; 再确认一次ANL A,#0F0HXRL A,#0F0HJZ NOKEY2 ;A为0,转向NOKEY2MOV A,P2 ;判哪一个键按下ANL A,#0F0HCJNE A,#0E0H,NEXT9MOV KEY,#8 ;按下的键是8LCALL DISPLAY ;根据按键在数码管上和LED上显示键值LJMP GWG0 ;继续检测NEXT9: CJNE A,#0D0H,NEXT10MOV KEY,#9 ;按下的键值是9LCALL DISPLAYLJMP GWG0 ; 继续检测NEXT10: CJNE A,#0B0H,NEXT11MOV KEY,#10 ;按下的键值是10LCALL DISPLAYLJMP GWG0 ; 继续检测NEXT11: CJNE A,#70H,NOKEY2MOV KEY,#11 ;按下的键值是11LCALL DISPLAYLJMP GWG0 ; 继续检测NOKEY2: MOV P2,#0FFH ;判第2行是否有键按下CLR P2.3 ;将P2.3清零MOV A,#P2ANL A,#0F0H ; 屏蔽高4位XRL A,#0F0HJZ NEXT16 ; A为0,转向NEXT16LCALL DELAY_10MS ; 延时,去抖动MOV A,P2 ; 再确认一次ANL A,#0F0HXRL A,#0F0HJZ NEXT16 ;A为0,转向NEXT16MOV A,P2 ;判哪一个键按下ANL A,#0F0HCJNE A,#0E0H,NEXT13MOV KEY,#12 ;按下的键值是12LCALL DISPLAY ;根据按键在数码管上和LED上显示键值LJMP GWG0 ;继续检测NEXT13: CJNE A,#0D0H,NEXT14MOV KEY,#13 ;按下的键值是13LCALL DISPLAYLJMP GWG0 ;继续检测NEXT14: CJNE A,#0B0H,NEXT15MOV KEY,#14 ;按下的键值是14LCALL DISPLAYLJMP GWG0 ;继续检测NEXT15: CJNE A,#70H,NEXT16MOV KEY,#15 ;按下的键值是15LCALL DISPLAYLJMP GWG0 ;继续检测NEXT16:LJMP GWG0; --------------------------------------------------------------------;外部中断0服务程序,即实现功能3闪烁显示ERR-和拓展功能蜂鸣器播放音乐; --------------------------------------------------------------------JINT0: NOPLCALL SMG_ERROR_1s ;显示ERR-LCALL DELAY_1S ;延时MOV A,#00H ;熄灭所有数码管,达到闪烁的效果MOV P0, ALCALL DELAY_1S ;延时LCALL SMG_ERROR_1s ;第二次显示ERR-LCALL DELAY_1S ;延时1sMOV P0,#00H ;再次熄灭所有数码管LCALL DELAY_1S ;延时1sLCALL SMG_ERROR_1s ;第三次显示ERR-LCALL DELAY_1S ;延时1sMOV P0,#00H ;对P0端口和R4寄存器进行清0MOV R4,#0RETI; --------------------------------------------------------------------; 外部中断1服务程序,即实现功能4,跑马灯; --------------------------------------------------------------------JINT1: MOV R1,#10 ;控制跑马灯的次数为10次JJHH: MOV P0,#0FFH ;将LED全部置1,MOV A,#0FEH ;点亮第一个LEDMOV R4,#8 ;控制左移次数为8次,即依次点亮8个LEDLOOP_PMD:MOV P0, ALCALL DELAY_1S ;在动态显示中,点亮每位数码管都需要2MSRL A ;对A左移进行左移,实现流水灯的效果DJNZ R4,LOOP_PMD;R4不为0,则对A继续进行左移,直到所有的LED都被点亮为止DJNZ R1,JJHH ;R1不为0,则继续进行跑马灯显示,总共10次LCALL DELAY_1SLCALL DELAY_1SRETI; --------------------------------------------------------------------;根据按键在数码管上和LED上显示键值,即实现功能一、二; --------------------------------------------------------------------DISPLAY:LCALL DISPLAY_SMG ;转向显示程序LCALL DISPLAY_LED ;转向显示程序MOV P0, #00H ;将数码管的所有位均置0,即都不选CLR HC595_RSTRET; --------------------------------------------------------------------;根据按键在数码管上显示键值,采用动态显示的方式; --------------------------------------------------------------------DISPLAY_SMG: MOV R1,#8DISPLAY_SMG_1:MOV R4,#255 ;使用了寄存器R4DISPLAY_SMG_2:MOV A, KEY ;将KEY转移给ALCALL SHOW_NUM_SMGMOV A,P0 ;打开所有的数码管即静态显示模式ANL A,#0F0H;ORL A,#8MOV P0,ALCALL DELAY_1MS ;在动态显示中,点亮每位数码管都需要2MSLCALL DELAY_1MS ;延时。

相关文档
最新文档