重庆高校联盟.docx
- 文档编号:16774623
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:15
- 大小:94.49KB
重庆高校联盟.docx
《重庆高校联盟.docx》由会员分享,可在线阅读,更多相关《重庆高校联盟.docx(15页珍藏版)》请在冰点文库上搜索。
重庆高校联盟
重庆高校联盟
电子制作大赛<大二组>报告与总结
重庆邮电大学
科技创新协会、半导体协会、电子
协会、学生科技联合会等联合举办
数理学院大一
姓名:
丁博武
学号:
2012213416
时间:
2012年11月18日
目 录
一、摘要
二、作品介绍
三、工作原理
四、总结
五、附录(部分电路图、源程序)
题目:
2012高校联盟电子制作大赛题目
大二组比赛题目
键控数码管
一、基本要求
(1)使用三个按键控制最后两位数码管设置一个二位数字,其中一个按键控制加数字,一个按键控制减数字,一个按键控制切换所控制的数码管。
(2)设定好数字后,利用定时器使这个数字以一秒为间隔倒计数到0,后再从0以一秒为间隔正计数到该数字。
(3)整个计数过程中,令LED小灯随数字的改变而亮灭。
(4)作品完成后需提交一份设计报告。
二、提高部分
(1)在基本要求1的基础上,实现长按键的功能。
具体为,当按住控制加数字的按键达到2S的时候,该位数码管的数值实现“0-9”自动循环递增,递增速度为50MS间隔,松开则停止。
长按控制减数字的按键达到2S的时候,该位数码管的数字实现“9-0”自动循环递减,递减的速度为50MS间隔,松开则停止。
若按键时间未超过2S,则只是按照基本要求1中的方式,只是简单的加1或减1。
(2)手写显示:
接基本要求,计数结束后在四位数码管上任意显示四个数字,如显示“1234”四个数字,完成以下效果:
如同书写效果一般,一笔一笔,一段一段“写”出“1234”四个数字。
(3)其它自由发挥,在作品中添加自己的创意。
(可自添元件)
三、评分标准
项 目
分数
报告
完成设计报告(程序代码以附件形式装订于报告后面)
10
基本
部分
完成第
(1)项
10
完成第
(2)项
15
完成第(3)项
10
提高
部分
完成第
(1)项
15
完成第
(2)项
15
其它自由发挥
15
外观(焊接工艺等)
10
四、说明 下载器部分不参与评分,下载方法可自行选择。
一、摘要
51单片机是一款单片微型计算机家族中经典之作,常用来作为教学使用,STC89C52RC是我们常用的一个51单片机,其具有高可靠、超低价、低功耗、无法解密等优点,尤其是其价格低廉受到我们普通学生的青睐。
本作品主要使用STC89C52RC来作为微控制器来通过按钮开关和数码管来实现一定的功能。
关键字:
51单片机、按钮开关、数码管
二、作品介绍
本作品主要使用51单片机内部资源定时器和基本IO口操作来实现各个功能,通过按钮开关来作为输入设备,数码管和LED作为基本输出显示设备。
初始化的数字是24,手写显示的是2012。
三、工作原理
单片机工作原理:
单片机的工作原理与计算机CPU的工作原理是一样的,主要是利用片内的半导体存储器存放用户的程序和数据,单片机的核心中央微处理器CPU中有指令寄存器、指令译码器,程序计数器等部件,由程序计数器寻找下一条要执行的指令,找到后,将指令送给指令寄存器,再由指令译码器翻译执行该指令,完成对指令功能的操作。
一句话:
单片机的工作就是不断地取指令、分析指令、执行指令的循环过程。
按预先编写的程序执行,以达到用户期待的结果。
本作品中,我们利用按钮开关作为输入,数码管作为输出,通过一定的编程,使单片机的IO口的高低电平发生变化而实现一定功能。
数码管原理:
实质是发光二极管的亮灭组合来显示数字、字母等,具有操作方便,应用范围广等特点。
按钮开关原理,我们将按钮开关一端接到IO口,另一端接地,当开关被按下时,该IO口会被赋零,以此来检测输入,然后通过程序来执行一定的显示。
参考文献:
1、《新概念51单片机C语言教程》 郭天祥
电子工业出版社 2009年12月
2、《C程序设计》(第四版) 谭浩强
清华大学出版社 2012年1月
3、《单片机原理及接口技术》 李全利
高等教育出版社2010年11月
四、总结:
在本次比赛中,通过对单片机IO口的基本编程,以及中断、定时器的使用,我更加深入地学习理解了单片机的原理以及C语言。
程序一共修改了427次,最终基本实现了各个功能,感谢各协会联合举办的这次比赛,使我们学到不少东西,同时更加熟练地掌握焊接技术等。
在本次比赛中,我认识到自己的焊接能力有待提高,另外需要学习Protel软件,以便用来制图等。
五、附录
1、部分电路图
省略电源电路、振荡电路、以及复位电路的电路图。
2、源程序
/***************************************************************/
/* 重庆高校联盟电子制作大赛 <大二组> */
/* 科技创新协会举办 */
/*学院:
数理学院 组员:
丁博武 学号:
2012213416 */
/* 题目:
玩转数码管 日期:
2012/11/15 */
/*****************************************************************/
#include
#defineuintunsignedint
#defineucharunsignedchar
//根据电路焊接方便而计算出来段选数组
ucharcodeduan[]={0xef,0x28,0xdb,0x7b,0x3c,0x77,0xf7,0x2f,0xff,0x7f};
ucharcodewei[]={0xff,0xfe,0xfd,0xfb,0xf7}; //位选的数组
//下面是用来手写用的数组
ucharcodeshou1[]={0x00,0x02,0x0a,0x1a,0x9a,0xdb,0xdb,0xdb,0xdb,
0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb}; //2
ucharcodeshou2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x84,0x86,
0x8e,0xae,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef}; //0
ucharcodeshou3[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x28,0x28,0x28,0x28,0x28,0x28}; //1
ucharcodeshou4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x0a,0x1a,0x9a,0xdb}; //2
ucharshu=24,shu1,fl,fl0,timenum,timenum1,timenum2,num,num0,numshou;
signedcharshu2;sbitled=P1^0;
sbitk2=P1^1;sbitk1=P1^2;
sbitk3=P1^3;sbitk4=P1^4;
//短延时函数
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
//开始测试元件的小程序
voidkaishi()
{
led=~led;P3=0XFF;P2=0X00;delayms(250);
led=~led;P3=0XFF;P2=0Xff;delayms(250);
}
//初始化
voidinit()
{
P1=0xfe; //P1是按键的接口,所以赋1,
TMOD=0x11;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
EA=1;
ET0=1;
ET1=1;
}
//数码管显示函数1
voidsmg1(ucharshu)
{
P2=wei[3];
P3=duan[shu/10];
delayms
(1);
P2=wei[4];
P3=duan[shu%10];
delayms
(1);
}
//数码管显示函数2
voidsmg2(ucharshu2)
{
P2=wei[4];
P3=duan[shu2];
}
//数码管显示函数3
voidsmg3(ucharnumshou)
{
P2=wei[1]; P3=shou1[numshou];delayms
(1);
P2=wei[2]; P3=shou2[numshou];delayms
(1);
P2=wei[3]; P3=shou3[numshou];delayms
(1);
P2=wei[4]; P3=shou4[numshou];delayms
(1);
}
//键盘子函数
voidkey()
{
if(k1==0) //k1是功能选择键用来切换各个模块
{
delayms(10);
if(k1==0)
{
num++; while(!
k1);
}
}
if(num==0&&k4==0) //用k4来切换十位和个位
{
delayms(10);
if(num==0&&k4==0)
{
num0++; //定义num0用来轮流十位和个位用
while(!
k4);
}
}
//按键加减数模块
if(num==0&&k2==0&&num0%2==0) //个位的加
{
delayms(10);
if(num==0&&k2==0&&num0%2==0)
{
shu++;
while(!
k2);
}
}
if(num==0&&k3==0&&num0%2==0) //个位的减
{
delayms(10);
if(num==0&&k3==0&&num0%2==0)
{
shu--;
while(!
k3);
}
}
if(num==0&&k2==0&&num0%2!
=0) //十位的加
{
delayms(10);
if(num==0&&k2==0&&num0%2!
=0)
{
shu=shu+10;
while(!
k2);
}
}
if(num==0&&k3==0&&num0%2!
=0) //十位的减
{
delayms(10);
if(num==0&&k3==0&&num0%2!
=0)
{
shu=shu-10;
while(!
k3);
}
}
//1秒间隔加减数模块
if(num==1&&k4==0)
{
delayms(10);
if(num==1&&k4==0)
{
TR0=1; //开定时器0,开始以一秒来减数和加数
while(!
k4);
}
}
//长按键模块实现数字的循环递增或递减
if(num==2&&k2==0) //长按键加模块
{
delayms(2000);
if(num==2&&k2==0)
{
fl=1;
}
else{fl=0;}
if(fl==0)
{
shu2++;
if(shu2==10)
{
shu2=0;
}
while(!
k2);
}
while(fl==1&&num==2&&k2==0)
{
shu2++;
smg2(shu2);
delayms(150);
if(shu2==10)
{
shu2=0;
}
}
}
if(num==2&&k3==0) //长按键减模块
{
delayms(2000);
if(num==2&&k3==0)
{
fl0=1;
}
else
{
fl0=0;
}
if(fl0==0)
{
shu2--;
if(shu2==-1)
{
shu2=9;
}
while(!
k3);
}
while(fl0==1&&num==2&&k3==0)
{
shu2--;
smg2(shu2);
delayms(150);
if(shu2==-1)shu2=9;
}
}
//手写显示模块
if(num==3&&k4==0) //手写的开始
{
delayms(10);
if(num==3&&k4==0)
{
led=0;
TR1=1;
while(!
k4);
}
}
if(num==4){num=0;} //当功能选择键加到4时,让其清零。
}
//中断服务子函数
voidzhongduan()
{
if(timenum==20) //加数用到中断服务函数子函数
{
shu1++;
timenum=0;shu--;led=~led;if(shu==0){TR0=0;TR1=1;}
}
if(timenum1==20) //减数用到中断服务函数子函数
{
timenum1=0;shu++;led=~led;if(shu==shu1){TR1=0;}
}
if(timenum2==10) //手写显示用的中断服务函数子函数
{
timenum2=0;numshou++;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重庆高校 联盟
![提示](https://static.bingdoc.com/images/bang_tan.gif)