单片机计算器C程序 文档.doc
上传人:sy****28 上传时间:2024-09-10 格式:DOC 页数:8 大小:155KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

单片机计算器C程序 文档.doc

单片机计算器C程序文档.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

《广州信先行科技有限公司》(51单片机教学板附教程,需要联系)#include"reg51.h"#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlongucharscanok;//扫描完成ucharcovendok;//校正完成标志位uchartimer;//定时器计数ucharKeyNo;//键值数ucharkey_num;//键值校正ulongdat;//数据ulongdatA;//过渡数据ucharaddflag;//加法标志位ucharsubflag;//减法标志位ucharmulflag;//乘法标志位uchardivflag;//除法标志位ucharoverflow;//溢出标志位ucharclrflag;//数据处理标志位ucharillegal;//除法的非法标志位/*********共阳数码管0-9数码表***********/unsignedchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f,0xff,0x86};uchardisplay_data[]={0x00,0x01,0x02,0x03};//数的缓存/*********管脚定义公共端输入控制信号线***********/sbitNo1=P2^4;sbitNo2=P2^5;sbitNo3=P2^6;sbitNo4=P2^7;sbitBELL=P3^6;/*********宏定义,定义数码管显示第几位***********/#defineDIS_NO1No1=0;No2=1;No3=1;No4=1#defineDIS_NO2No1=1;No2=0;No3=1;No4=1#defineDIS_NO3No1=1;No2=1;No3=0;No4=1#defineDIS_NO4No1=1;No2=1;No3=1;No4=0/***********定义数码管显示控制端口************/#defineLEDP0#defineKEYP2/***********延时子函时,*******************/voidkey_down();//是否有按键按下voidkey_scan();//按键扫描函数voiddisplay_deal(ulongdatnum);//取数送显示voidcalculate_handle(void);voidadd(void);voidsub(void);voidmul(void);voiddiv(void);voidequ(void);voiddatpros(void);//数据处理函数。。voidcovend(void);//键值校正函数voidBell(void);/************************1ms的延时函数******************************/voiddelay_ms(unsignedintz)//1ms的延时函数{ucharx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/*******主函数********/voidmain(void){while(1){LED=0xff;//由于引脚复用这里关闭数码管显示避免选中显示其他灯管,防干扰key_down();//是否有按键按下covend();//键值校正函数calculate_handle();//键值功能处理display_deal(dat);//数拆分送显示LED=display_data[3];DIS_NO4;delay_ms(4);LED=0xff;if(display_data[0]==0xc0&&display_data[1]==0xc0&&display_data[2]==0xc0)//千位百位以及十位是0十位就不用显示{LED=0xff;}elseLED=display_data[2];DIS_NO3;delay_ms(4);LED=0xff;if(display_data[0]==0xc0&&display_data[1]==0xc0)//千位百位是0十位就不用显示{LED=0xff;}elseLED=display_data[1];