电子系统课程设计17805638_第1页
电子系统课程设计17805638_第2页
电子系统课程设计17805638_第3页
电子系统课程设计17805638_第4页
电子系统课程设计17805638_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计题目 基于STC51单片机的计算小组成员:何镇 宋俊 廖海 日期:201111STC51完成计算器的加减乘除法运算,并且显示结4*4矩阵键盘STC51单片机。24MHZSTC51单片机速度跟快,并且价12MHZ差不多。12864太浪费,且价格比较贵,不予选用。160212864这个器件比较164*4的矩阵键盘作为输入设备。1,5声音信号31脚(EA/VPP),0000HROM31复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,RC值来决定.51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,RC588个发光二极管(LED)的正极接在一LED的负极连在一起,也有八5个位选只有一个选通,82,那5位数码管上。数码管接法如下图4.4*4是通过一个按键加以连接。这样,一个端口(P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数20键的键盘,而的列线,判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则所有的行线都为高电平。第二步,在第一步判断有键按下后,延时10ms消除机械第三步,开始扫描按键位置,采用逐行扫描,每间隔1ms的时间,分别拉低第一列,第二列,第三列,第四列,无论拉低哪第四步,从寄存器中找到行值和列值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000”至“1111”,再进行译码,最后鸣器发音一鸣器发音一进入中断服显示数码管动态数显示数码管动态数判断键盘是按下的是什么键完成对/**************************(简单版/******制作时间:20111108号#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuint unsignedint/****************************************单片机各个口的定义#definekey_dataP1#define wei_1= wei_2= wei_3= wei_4= wei_5= wei_6= BEEP=ucharKeyNO; uchar //uchar //uchardatadata_count[5]={0,0,0,0,0}; //只能用0~9uchardatadata_use[5]={0,0,0,0,0}; ucharsCode,kCode,i1,k; ucharlong //long //longdata_hou[5]={0,0,0,0,0}; longcount1,count2;ucharkey_control;ucharasd; ucharmn; voidDelay(uintmasd);voiddisplay();voidduan_selct();voidBeep();voidKeys_Scan();voidkey_decide();voidjia();voidvoidcheng();voidchu();voidfuzhi();voidkeybord(uchara);voidDelayMS(uintms);/****************************主函数IT0=0;//0选用电平触发方式PX0=1;//0为高级中断源//data_count[0]=key_value[KeyNO];//1~15的值/****0的终段服务函数,外部中断判断按键voidkey_int()interrupt0

/*****************************************************************************,10~voidkey_decide()case0:keybord(0);break;case1:keybord(1);break;case2:keybord(2);break;case3:keybord(3);break;case4:keybord(4);break;case5:keybord(5);break;case6:keybord(6);break;case7:keybord(7);break;case8:keybord(8);break;case9:keybord(9);break;case10:operation_select=1;else else elseif(operation_select_1==3) elseif(operation_select_1==4) caseelse elseif(operation_select_1==2) elseif(operation_select_1==3) elseif(operation_select_1==4) case12:else elseif(operation_select_1==2) elseif(operation_select_1==3) elseif(operation_select_1==4) case13:else elseif(operation_select_1==2) elseif(operation_select_1==3) elseif(operation_select_1==4) case14: elseif(operation_select==2) elseif(operation_select==3) elseif(operation_select==4) case15:data_use[4]=0;

data_count[4]=0;data_count[3]=0;data_count[2]=0;data_count[1]=0;data_qian[4]=0;data_qian[3]=0;data_qian[2]=0;data_qian[1]=0;data_hou[4]=0;data_hou[3]=0;data_hou[2]=0;operation_select=0;asd=0;KeyNO=0;duan_1=0;sCode=0; i1=0; case16:default:_nop_();/**************函数功能:数码管显示voiddisplay()uchari; 位,duan_1=data_use[0];duan_selct();if(x==1)duan=duan+ duan_1=data_use[1];duan_selct();if(x==2)duan=duan+ duan_1=data_use[2];duan_selct();if(x==3)duan=duan+ duan_1=data_use[3];duan_selct();if(x==4)duan=duan+0x80;Delay(20); duan_1=data_use[4];duan_selct();if(x==5)duan=duan+0x80;Delay(20);/**************函数功能:数码管段选voidduan_selct()case0:case1:case2:case3:case4:case5:case6:case7:case8:case9://case //case //case //case //case //case //case default:duan=0x86; //E,表示结果是不可/***********************************函数功能:蜂鸣器voidBeep()uinti;BEEPBEEP=/**********************************加减乘除运算/***********************************函数功能:赋值运算voidfuzhi()/***********************************函数功能:加法运算voidjia()count1=data_qian[4]*10000+data_qian[3]*1000+data_qian[2]*100++count2=data_qian[4]*10000+data_hou[3]*1000+data_hou[2]*100+data_hou[1]*10+add=count1+count2;/***********************************函数功能:减法运算voidjian()count1=data_qian[4]*10000+data_qian[3]*1000+data_qian[2]*100++count2=data_hou[4]*10000+data_hou[3]*1000+data_hou[2]*100+data_hou[1]*10+cut=count1-count2;/***********************************函数功能:乘法运算voidcheng()count1=data_qian[4]*10000+data_qian[3]*1000+data_qian[2]*100++count2=data_hou[4]*10000+data_hou[3]*1000+data_hou[2]*100+data_hou[1]*10+multiply=count1*count2;/***********************************函数功能:除法运算voidchu()count1=data_qian[4]*10000+data_qian[3]*1000+data_qian[2]*100++count2=data_hou[4]*10000+data_hou[3]*1000+data_hou[2]*100+data_hou[1]*10+divide=count1/count2; if(divide_1==0&&mn==0)

if((((count1*10)/count2)%10!=0) (((count1*100)/count2)%10==0)elseif((((count1*10)/count2)%10!=0) (((count1*100)/count2)%10!=0)

/***********************************函数功能:voidDelay(uintmasd)ucharj;voidDelayMS(uintms)uchart;/******************函数功能:键盘扫描voidKeys_Scan()ucharP1=Tmp=P1^0x0f;case1:KeyNO=0;case2:KeyNO=1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论