精华内容
下载资源
问答
  • 单片机计算器代码

    2014-07-17 09:24:00
    代码单片机课程设计的代码,是本人测试好的可以实现其功能的,只要把硬件弄正确就可以了
  • 8051单片机计算器代码

    2013-03-29 08:11:19
    8051 计算器代码
  • 51单片机计算器代码

    2018-01-15 22:19:00
    51计算器程序#include #include #define uchar unsigned char #define uint unsigned int sbit lcden=P3^4; sbit lcdrw=P3^6; sbit lcdrs=P3^5; uchar num,temp,jia=0,cheng=0,chu=0,jian=0,qing=0; uint key,key1,...
  • #include<reg52.h> #include"daily.h" #include"add.h" #define N 10 uchar code table1[]=“0123456789”; int dz=16; void write_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1;...lcdr
    #include<reg52.h>
    #include"daily.h"
    #include"add.h"
    #define N 10
    
    uchar code table1[]="0123456789";
    int dz=16;
    
    void write_com(uchar com)
    {
    	lcdrs=0;
    	P0=com;
    	delay(5);
    	lcden=1;
    	delay(5);
    	lcden=0;
    }
    
    void write_data(uchar date)
    {	
    	write_com(0x80+dz);
    	lcdrs=1;
    	P0=date;
    	delay(5);
    	lcden=1;
    	delay(5);
    	lcden=0;
    	write_com(0x18);
    	dz++;
    }
    
    void write_data1(uchar date)
    {
    	lcdrs=1;
    	P0=date;
    	delay(5);
    	lcden=1;
    	delay(5);
    	lcden=0;
    }
    
    void init()
    {
    	dz=16;
    	dula=0;
    	wela=0;
    	lcden=0;
    	write_com(0x38);
    	write_com(0x0c);
    	write_com(0x06);
    	write_com(0x01);
    }
    
    ulong exchange(uchar *t)
    {
    	int i;
    	ulong result=0;
    	for(i=0;t[i]>=0&&t[i]<=9&&i<N;i++)
    		result=result*10+(ulong)t[i];
    	return result;
    }
    
    ulong sizeof_result(ulong t)
    {
    	ulong i,j;
    	i=t/10;
    	j=1;
    	while(i>0)
    	{
    		i=i/10;
    		j++;
    	}
    	return j;
    }
    
    ulong add(ulong x,ulong y)
    {
    	ulong r;
    	r=x+y;
    	return r;
    }
    
    ulong sub(ulong x,ulong y)
    {
    	ulong r;
    	if(x<y)
    	{
    		write_data1('-');
    		r=y-x;
    	}
    	else
    		r=x-y;
    	return r;
    }
    
    ulong mul(ulong x,ulong y)
    {
    	ulong r;
    	r=x*y;
    	return r;
    }
    
    ulong div(ulong x,ulong y)
    {
    	ulong r;
    	r=x/y;
    	return r;
    }
    
    void main()
    {
    	uchar c[N],b[N];
    	uchar i,p;
    	ulong j,num,s1,s2,r,result[N];
    	first:
    	init();
    	p='z';
    	for(i=0;i<N;i++)
    		c[i]='z';
    	
    	for(i=0;i<N;i++)
    	{
    		while(c[i]=='z')
    			c[i]=superkeyscan();
    		if(c[i]=='!')
    			goto first;
    		if(c[i]>=0&&c[i]<=9)
    			write_data(table1[c[i]]);
    		else
    			break;
    	}
    	
    	if(c[i]>=0&&c[i]<=9)
    		while(p=='z')
    			p=superkeyscan();
    	else
    		p=c[i];
    	if(p=='!')
    			goto first;
    	if((p!='+'&&p!='-'&&p!='*'&&p!='/')||i==0)
    	{
    		write_com(0x01);
    		dz=16;
    		write_data('E');
    		write_data('r');
    		write_data('r');
    		write_data('o');
    		write_data('r');
    		write_com(0x18);
    		delay(2000);
    		goto first;
    	}
    	write_data(p);
    	
    	second:
    	for(i=0;i<N;i++)
    		b[i]='z';
    
    	for(i=0;i<N;i++)
    	{
    		while(b[i]=='z')
    			b[i]=superkeyscan();
    		if(b[i]=='!')
    			goto first;
    		if(b[i]>=0&&b[i]<=9)
    			write_data(table1[b[i]]);
    		else
    			break;
    	}	
    
    	s1=exchange(c);
    	s2=exchange(b);
    	
    	write_com(0x80+0x50);
    	switch(p)
    	{
    		case '+':r=add(s1,s2);break;
    		case '-':r=sub(s1,s2);break;
    		case '*':r=mul(s1,s2);break;
    		case '/':r=div(s1,s2);break;
    	}
    	
    	num=sizeof_result(r);
    	for(j=num;j>0;j--)
    	{
    		result[j-1]=r%10;
    		r=r/10;
    	}
    	
    	for(j=0;j<num;j++)
    	{
    		write_data1(table1[result[j]]);
    		delay(50);
    	}
    
    	p='z';
    	while(p=='z')
    	{
    		p=superkeyscan();
    		if(p!='+'&&p!='-'&&p!='*'&&p!='/'&&p!='!')
    			p='z';
    	}
    	if(p=='!')
    			goto first;
    	write_com(0x01);
    	dz=16;
    	write_data('A');
    	write_data('n');
    	write_data('s');
    	write_data(p);
    	for(j=0;j<num;j++)
    		c[j]=(uchar)result[j];
    	goto second;
    }
    

    具体的路径配置可在网上查询

    #ifndef __ADD_H__
    #define __ADD_H__
    
    uchar superkeyscan()
    {
    	uchar t;
    	uchar key='z';
    	P3=0xfe;
    	t=P3;
    	t=t&0xf0;
    	if(t!=0xf0)
    	{
    		delay(40);
    		t=P3;
    		t=t&0xf0;
    		if(t!=0xf0)
    		{
    			t=P3;
    			switch(t)
    			{
    				case 0xee:key='/';break;
    				case 0xde:key=7;break;
    				case 0xbe:key=8;break;
    				case 0x7e:key=9;break;
    			}
    			while(t!=0xf0)
    			{
    				t=P3;
    				t=t&0xf0;
    			}
    		}
    	}
    	
    	P3=0xfd;
    	t=P3;
    	t=t&0xf0;
    	if(t!=0xf0)
    	{
    		delay(40);
    		t=P3;
    		t=t&0xf0;
    		if(t!=0xf0)
    		{
    			t=P3;
    			switch(t)
    			{
    				case 0xed:key='*';break;
    				case 0xdd:key=4;break;
    				case 0xbd:key=5;break;
    				case 0x7d:key=6;break;
    			}
    			while(t!=0xf0)
    			{
    				t=P3;
    				t=t&0xf0;
    			}
    		}
    	}
    	
    	P3=0xfb;
    	t=P3;
    	t=t&0xf0;
    	if(t!=0xf0)
    	{
    		delay(40);
    		t=P3;
    		t=t&0xf0;
    		if(t!=0xf0)
    		{
    			t=P3;
    			switch(t)
    			{
    				case 0xeb:key='-';break;
    				case 0xdb:key=1;break;
    				case 0xbb:key=2;break;
    				case 0x7b:key=3;break;
    			}
    			while(t!=0xf0)
    			{
    				t=P3;
    				t=t&0xf0;
    			}
    		}
    	}
    	
    	P3=0xf7;
    	t=P3;
    	t=t&0xf0;
    	if(t!=0xf0)
    	{
    		delay(40);
    		t=P3;
    		t=t&0xf0;
    		if(t!=0xf0)
    		{
    			t=P3;
    			switch(t)
    			{
    				case 0xe7:key='+';break;
    				case 0xd7:key='!';break;
    				case 0xb7:key=0;break;
    				case 0x77:key='=';break;
    			}
    			while(t!=0xf0)
    			{
    				t=P3;
    				t=t&0xf0;
    			}	
    		}
    	}
    	return key;
    }
    
    #endif
    
    
    #ifndef __DAILY_H__
    #define __DAILY_H__
    
    #define uchar unsigned char
    #define uint unsigned int
    #define ulong unsigned long
    
    sbit led1=P1^0;
    sbit led2=P1^1;
    sbit led3=P1^2;
    sbit led4=P1^3;
    sbit led5=P1^4;
    sbit led6=P1^5;
    sbit led7=P1^6;
    sbit led8=P1^7;
    
    sbit lcden=P3^4;
    sbit lcdrs=P3^5;
    
    sbit key1=P3^4;
    sbit key2=P3^5;
    sbit key3=P3^6;
    sbit key4=P3^7;
    
    sbit dula=P2^6;
    sbit wela=P2^7;
    
    unsigned char code table[]={
    	0x3f,0x06,0x5b,0x4f,
    	0x66,0x6d,0x7d,0x07,
    	0x7f,0x6f,0x77,0x7c,
    	0x39,0x5e,0x79,0x71};
    
    
    void delay(int xms)
    {
        int x=0;
    		int y=0;
    	for(x=xms;x>=0;x--)
    		for(y=110;y>=0;y--);
    }
    
    
    #endif
    
    
    展开全文
  • 51单片机c语言计算器代码//8位液晶数码管显示的计算器,代码通俗易懂//用到数码管、矩阵键盘、中断三个模块#include"reg52.h"#include"stdio.h"typedef unsigned char uchar;typedef unsigned int uint;sbit Wei = ...

    51单片机c语言计算器代码

    //8位液晶数码管显示的计算器,代码通俗易懂

    //用到数码管、矩阵键盘、中断三个模块

    #include"reg52.h"

    #include"stdio.h"

    typedef unsigned char uchar;

    typedef unsigned int uint;

    sbit Wei = P2^3;//定义"74hc573d锁存器"端口,控制数码管位码;

    sbit Duan = P2^2;//定义"74hc573d锁存器"端口,控制数码管段码;

    code uchar WeiMa[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

    //共阴数码管点亮位,从第0位到第7位,共8个;

    code uint DuanMa[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

    0x07,0x7f,0x6f};//共阴数码管显示的值“0~9”;

    uchar DuanMaZhi[8];//储存数码管显示值的全局变量;

    Timer_0();//数码动态扫描的定时器函数;

    Delay(uint t);//按键去抖的延迟函数;

    Key_1();//矩阵键盘扫描函数;

    Key_2();//矩阵键盘返回值函数;

    main()

    {

    uchar n,i,L,F,T[8],s;

    uint a = 0,b = 0;

    Timer_0();

    DuanMaZhi[0] = DuanMa[0];//复位后数码管显示“0”

    while(1)

    {

    n = Key_2();//变量n存储函数返回值

    if(n != 0xff)//检测到有返回值

    {

    if(i == 0)

    {

    for(s = 0;s < 8;s++)

    DuanMaZhi[s] = 0;//清除缓冲区

    }

    if((8 == i) || ('+' == n) || ('-' == n) || ('x' == n)

    || ('/' == n) || ('=' == n))//检测到下列符号则代表输

    //入结束;

    {

    i = 0;

    if(F == 0) //第一个输入值赋给a;

    {

    sscanf(T,"%d",&a);//输入值存储到变量a,下同;

    F = 1;

    }

    else

    sscanf(T,"%d",&b);

    for(s = 0;s < 8;s++)

    T[s] = 0;//清除缓存区的值;

    if(n != '=')//判断是否为等号,做下标记;

    L = n;

    else

    {

    F = 0;

    switch(L)//计算操作

    {

    case '+':a = a + b;break;

    case '-':a = a - b;break;

    case 'x':a = a * b;break;

    case '/':a = a / b;break;

    default:break;

    }

    sprintf(T,"%d",a);

    for(s = 0;s < 8;s++)

    {

    if(T[s] == 0) //如果检测到null,则数码管不显示;

    DuanMaZhi[s] = 0;

    else if(T[s] == 0x2d) //如果为负号则在段码显示负号;

    DuanMaZhi[s] = 0x40;

    else

    DuanMaZhi[s] = DuanMa[T[s] - '0'];

    //从ascall码计算数值

    }

    L = 0; //全部清零;

    a = b = 0;

    for(s = 0;s < 8;s++)

    T[s] = 0;

    }

    }

    else if(i < 16)

    {

    T[i] = n + '0';

    DuanMaZhi[i] = DuanMa[n];//输出数据;

    i++;

    }

    }

    }

    }

    Key_1()//矩阵键盘翻转扫描

    {

    uchar i,j;

    P1 = 0x0f;

    if(P1 != 0x0f)

    {

    Delay(4500);//去除按键抖动;

    if(P1 != 0x0f)

    {

    i = P1;

    P1 = i | 0xf0;

    j =

    展开全文
  • 单片机计算器

    2015-12-30 10:47:29
    简述单片机计算器代码和仿真文件。便于学生下载学习。
  • 用汇编语言实现计算器的基本功能,其实工作量比较大的。共享给大家用是7年前写的。
  • 单片机编程,里面是智能计算器代码,比较好用,用的是c51芯片
  • 51单片机计算器代码和电路图 文章目录51单片机计算器代码和电路图一、问题描述二、具体实现1.完整代码带注释2.电路图总结 一、问题描述 通过AT89C51单片机16位矩阵键盘设计简易计算器(仅能实现加减操作) 二、...

    【单片机】51单片机计算器代码和电路图


    一、问题描述

    通过AT89C51单片机16位矩阵键盘设计简易计算器(仅能实现加减操作)

    二、具体实现

    1.完整代码带注释

    
    #include<reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    
    uchar code table[]=
    					{0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,
    					0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};//显示数字0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
    uchar code address[]={0xfe,0xfd};//位选1,2
    					//1111 1110数码管显示第一位
    					//1111 1101数码管显示第二位
    uchar code KEY_TABLE[] = 
    						{0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,
    						0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//(反转法)矩阵键盘的各个按键的计算值
    
    void delay(int k)
    {
    	for( ; k>0; k--);
    }
    
    void delay1()
    {
    	uint n = 50000;while(n--);
    }
    
    void delay2()
    {
    	uint n = 10000;while(n--);
    }
    
    main()
    {
    	uchar temp,key,num,i;
    	int sum,sign,j,a[16],k=0;
    	while(1)
    	{
    		P3 = 0xf0;//1111 0000
    		if(P3 != 0xf0)
    		{
    			delay2();
    			if(P3 != 0xf0)
    			{
    				temp = P3;
    				P3 = 0x0f;//0000 1111
    				key = temp|P3;//低四位改变,若有键按下,得出低四位的值。xxxx 1111
    				for(i=0; i<16; i++)
    					if(key == KEY_TABLE[i])
    					{	num = i;//0,1,2,3,,15
    						delay(200);
    						//0-14显示
    						if(num>=0 && num<=14)
    						{
    							a[k++]=num;//a[0]=0
    							P2 = address[0];//位选为0xfe,显示第一位数字
    							P1 = table[num];//显示数字num
    							delay(2000);
    						 }  
    					 
    						else if(num==15)//按下15等号键进行判断
    						{
    							//判断输入的值是否合法
    							if(a[0]>=0 && a[0]<=9 && (a[2]>=0 && a[2]<=9) && (a[1]==10 || a[1]==11))//1+2(第一位数字a[0],第二个运算符a[1]+-,第三位数字a[2])
    									sign=1;//合法
    							else
    									sign=3;//不合法
    
    							for(j=0;j<3;j++)//A+B循环三次,两个数字和一个运算符
    							{
    									if(a[j]==12||a[j]==13||a[j]==14)//如果是12,13,14位,无效键
    										sign=0;
    							}
    						}
    							
    						if(sign==1)//合法
    						{
    							if(a[1]==10)//按下加号键
    								sum=a[0]+a[2];//实现加法
    							else if(a[1]==11)//按下减号键
    								sum=a[0]-a[2];//实现减法
    						}
    					}
    				delay1();
    			}
    		}
    	
    		//合法
    		if(sign == 1)
    		{
    			if(sum<10)//0-9
    			{
    				P2=address[0];//位选为0xfe,显示第一位数字
    				P1=table[sum];//显示数字table[sum]
    			}
    			else
    			{
    				for(i=0;i<100;i++)
    				{
    					P2=address[1];//位选为0xfd,显示第二位数字
    					P1=table[sum/10];
    					delay(1000);
    					
    					P2=address[0];//位选为0xfe,显示第一位数字
    					P1=table[sum%10];
    					delay(1000);
    				}
    			}
    		}
    
    		//不合法键判断
    		if(sign == 3)
    		{
    			P2=address[0];//位选为0xfe,显示第一位数字
    			P1=table[15];//显示字符f
    					
    			P2=address[1];//位选为0xfd,显示第二位数字
    			P1=table[15];//显示字符f
    		}
    
    		//无效键判断
    		if(sign == 0)
    		{
    			P2=address[0];//位选为0xfe,显示第一位数字
    			P1=table[0];//显示字符f
    					
    			P2=address[1];//位选为0xfd,显示第二位数字
    			P1=table[0];//显示字符f
    		}
    	}
    }
    
    

    2.电路图

    初始界面
    ![计算器](https://img-blog.csdnimg.cn/20201120214433935.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODcwMTUyMQ==,size_16,color_FFFFFF,t_70#pic_center
    实现加法操作
    在这里插入图片描述

    总结

    全网最详细代码,直接拿去用,感谢大家对我的关注!

    展开全文
  • 单片机计算器程序

    2011-11-13 14:41:59
    简单的计算器程序,可供初学单片机的人使用。代码简单。
  • 51单片机计算器

    2014-11-19 15:46:14
    51单片机实现简单计算器功能,全程手工无复制粘贴
  • 基于stc89c52单片机设计的智能计算器代码 实现两个数的运算,每个数的位数至少可以八位
  • 创建一个简单的计算器具有简单人机交互界面易于操作便于进行数据之 间的简单运算 二具体要求包括技术要求等 1能够实现基本的加减乘除四则运算及开方乘方运算 2如输入数据时出现错误可以修改 3运算结果能正确显示...
  • 描述: 基于51单片机的12864液晶显示计算器设计相关的仿真+代码分享,protues仿真文件在附件供下载。 计算器仿真原理图如下: 单片机部分源程序截图如下: 附件内容截图:
  • 一个基于51单片机做的课程设计 源代码 原理图PCB 附带开题报告 到手参考即做
  • 《基于C51单片机简易计算器的课程设计.doc》由会员分享,可免费在线阅读全文,更多与《基于C51单片机简易计算器的课程设计(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、位七段码,H...

    《基于C51单片机简易计算器的课程设计.doc》由会员分享,可免费在线阅读全文,更多与《基于C51单片机简易计算器的课程设计(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。

    1、位七段码,H单元存放数值的百位七段码,H单元存放数值的千位七段码。本方案设计中由P口输出字形码,P口输出字位码。先将存放于H单元的数值个位七段码由P口输出,同时P口输出使数值个位显示数码管点亮的字位码。由于采用的是共阴数码管,所以只有该位数码管对应的P为,其他位PP位,点亮延时MS。然后P口输出数值十位七段码,P位,数值十位数码管点亮,延时MS。接着P口输出数值百位七段码,P为,数值百的点亮时间为~ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的IO埠,而且功耗更低。综上所述我们在本设计方案中选用了动态显示。位LED显示的程序框图如图所示:图LED显示流程图主程序设计主程序进行程序中用到的一些存储单元的初始化,数值显示和*键盘扫描。首先,进行存储单元初始化,给数码管显示单元HH赋予“”字形数据,将数值计数单元,存储单元,HH,HH,H,H,AH,BH,CH,赋予初值零。之后,调用键盘扫描子

    2、amnumgt=amamnumlt=)dislay(num);el使用的标准键盘就是编码键盘。在智能仪器中,使用并行接口芯片或串行接口芯片HD均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可以在相关资料中得到。当系统功能比较复杂,案件数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不很多(个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的电路由设计者根据需要自己决定,按键信息通过接口软件来获取。本课题需要个按键,故选择非编码键盘,为了减少所占用的端口,由P口采用*矩阵式键盘。图键盘样式输出电路设计数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“”可分为位、位、位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳级数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳级数码管在应用时应将公共极COM接到+V,当某一字段发光二极管的阴极为低电平时,相应字

    3、段就点亮。当某一字段的阴极为高电平时,对应的字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,对应的字段就不亮。LED显示器由七段发光二极管组成,排列成字形状,因此也成为七段LED显示器,器排列形状如下图所示:图LED段码为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字~的共阴极字形代码如下表所示:显示字型gfedcBa段码fhhbhfhhdhdhhfhfh表~七段数码管共阴级字形代码由于数值单元存放的是二进制数,而我们大家熟悉的是十进制数,所以应将数值单元中的二进制数字转换为十进制数字,即BCD码。要通过数码管显示出当前的数值,还必须将BCD码进一步转换为七段码,转换的最终结果数据存放于显示缓冲区HH单元中,其中H单元存放数值的个位七段码,H单元存放数值的十

    4、=)按下ONC键,清零{flag_fuhao=;shu=shu=fuhao=flag_shu=newkey=;}elseif(key_shu==amamflag_shu==amamfuhao)按下quot=quot{switch(fuhao){case:shu=shu+shu;eak;case:shu=shushu;eak;case:shu=shu*shu;eak;case:shu=shushu;eak;}fuhao=;flag_fuhao=;}elseif((key_shugt=)amam(key_shu=)amam(key_shult=))按下运算符{flag_fuhao=;if(flag_shu==){if(fuhao==){shu=shu;shu=;fuhao=key_shu;flag_shu=;}else{switch(fuhao){case:shu=shu+shu;eak;case:shu=shushu;eak;case:shu=shu*shu;eak;case:shu=shushu;eak;}shu=;fuhao=key_shu

    5、。最后P口输出数值千位七段码,P为,数值千位数码管点亮,延时MS。发光二极管LED是单片机应用系统中的一种简单而最常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。因而作为典型的外围器件,LED显示单元是反映系统输出和操作输入的有效元器件。LED具备数字接口可以方便的和单片机引脚连接;它的优点是价格低,寿命长,对电压电流的要求低以及容易实现多路等,因而在单片机应用系统中获得了广泛的应用,所以在此设计中我首先选用了LED作为显示器件。如图所示:图数码显示管程序设计本方案中的程序设计采用了模块化设计,各部分程序都分别进行独立的设计,最后主程序通过调用各模块程序来运行,编程中所使用的语言全部都是C语言,可以利用keil软件进行灵活的编译,编译完成后也可生成HEX文件,利用ISP编程软件通过串口写到单片机中。本方案程序设计中部分包括主程序模块、液晶显示模块、功能按键和控制输出等部分。下面仅仅叙述了各部分程序设计的基本思想和流程图,详细程序请参阅附录。读键输入程序流程图为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,

    6、,通过我的不懈努力,在动手方面,我会得到提高。这一点,我坚信。在此次的课程设计中我最大的体会就是进一步认识到了理论联系实践的重要性。一份耕耘,一份收获。通过这段时间的设计,让我明白科学的思维方法和学习方法是多么重要,只有这样才能够有很高的效率,才能够让自己的工作更完美。总而言之,此次毕业设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。谢谢老师给我们提供这么好的机会,为我们之后走向社会奠定了一个好的基础。在我做课程设计的整个过程中,无论是在设计的选题、构思和资料的收集方面,还是在设计的研究方法以及成文定稿方面,或是在论文的写作过程中,都得到了许多同学的宝贵建议,在此一并致以诚挚的谢意。感谢所有关心、支持、帮助过我的同学。元件清单元件数量单价(元)M晶振STCC芯片轻触按键排阻四位一体公阴数码管电阻若干杜邦线排针电容若干总计附录简易计算器源程序includedefineucharunsignedchardefineuintunsignedintdefineduanP数码管显示段选定义defineweiP数

    7、较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响。功能和操作:加减乘除运算和显示。A:上电后,屏幕初始化,按下“ONC”键。B:计算。按下数字键,屏幕显示要运算的第一个数字,再按下符号键,然后再按下数字键,屏幕显示要运算的第二个数字,最后按下“﹦”号键,屏幕上显示出计算结果。C:如果要再次计算,可以按下“ONC”键清零,或者按下单片机的复位键,重新初始化。硬件联系图如下图:硬件连线图结论课程设计是培养学生运用所学的专业知识,发现,提出,分析和解决实际问题,锻炼实际动手能力的重要环节,是对学生实际工作能力的具体训练和考察,随着科学技术日新月异的发展,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说遍布我们生活之中。这次设计进一步端正了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求。急于求成是不好的,通过此次毕业设计我深有体会。如果省略了那些必要的步骤,急于求成,不仅会浪费时间,还会适得其反。我觉得动手之前,应该有清楚的步骤,这一步是很重要的。就目前来说,我的动手能力虽然还有差距,但我知道数码管点亮,延时MS

    8、in(){flag=;标志关机while(){if(keyscan()==)开机检测{flag=;标志开机shu=shu=fuhao=flag_shu=newkey=;初始化变量while(flag){if(!flag_fuhao)dislay(shu);elsedislay(shu);key_shu=keyscan();if(newkey==)sedislay(shu);}returnnum;}}key=xfb;if(key!=xfb){delay();if(key!=xfb){switch(key){casexeb:num=;eak;casexdb:num=;eak;casexbb:num=;eak;casexb:num=;eak;}newkey=;delay();while(key!=xfb){if(flag)if(!shuamamnumgt=amamnumlt=)dislay(num);elsedislay(shu);}returnnum;}}key=xf;if(key!=xf){delay();if(key!=xf){switch(

    9、;}}elseif(flag_shu==)fuhao=key_shu;}newkey=;}}}}}键盘扫描ucharkeyscan(){key=xfe;if(key!=xfe){delay();if(key!=xfe){switch(key){casexee:num=;eak;casexde:num=;eak;casexbe:num=;eak;casexe:num=;eak;quotquot}newkey=;delay();while(key!=xfe){if(flag)if(!shuamamnumgt=amamnumlt=)dislay(num);elsedislay(shu);}returnnum;}}key=xfd;if(key!=xfd){delay();if(key!=xfd){switch(key){casexed:num=;eak;casexdd:num=;eak;casexbd:num=;eak;casexd:num=;eak;*}newkey=;delay();while(key!=xfd){if(flag)if(!shua

    10、码管显示位选定义definekeyP键盘接口定义sbitOFF=P^;关机键定义unsignedlongintshu,shu;进行运算的两个变量数ucharnum;键盘扫描返回值charflag,flag_shu,flag_fuhao,fuhao,newkey;flag开机标志新按键标志,fuhao运算符charkey_shu;按键值unsignedcharcodeWela[]={xdf,xef,xf,xfb,xfd,xfe};六位数码管的位选unsignedcharcodeDuan[]={xf,x,xb,xf,x,xd,xd,x,xf,xf,x};无显示共阴极数码管ucharkeyscan();键盘扫描函数voiddislay(unsignedlongint);数码管显示函数voiddelay(uinti)延时函数{while(i);}***********************************************主函数************************************************voidma

    11、序,和数码管显示数据转换程序,数码管动态显示子程序。主程序不断进行键盘扫描,数码管显示数据转换子程序和动态显示子程序。首先初始化参数,送LED低位显示“”,功能键(“+”、“”、“*”、“”、“+”)位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是“+”、“”、“*”“”,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。运算主程序框图如所示:图运算主程序框图仿真与调试在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模块可以进行单独的设计、编程和调试,然后组合起来。这种方法便于设计和调试,容易实现多个程序共存,但各个模块之间的连接有一定的难度。根据需要我们可以采取自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步完成,最终完成一个复杂程序的设计。这种方法比

    12、ey){casexe:num=;eak;ONCcasexd:num=;eak;casexb:num=;eak;=casex:num=;eak;+}newkey=;delay();while(key!=xf){if(flag)if(!shuamamnumgt=amamnum)dis_flag=;elseif(dis_shugt)dis_flag=;elseif(dis_shugt)dis_flag=;elseif(dis_shugt)dis_flag=;elseif(dis_shugt)dis_flag=;elsedis_flag=;for(dis_aa=;dis_aaltdis_flag;dis_aa++){dis_data[dis_aa]=dis_shu%;dis_shu=dis_shu;}数码管段选for(dis_aa=;dis_aaltdis_flag;dis_aa++){duan=Duan[dis_data[dis_aa]];wei=Wela[dis_aa];delay();wei=xff;}数码管位选}新键值{if(key_shu=

    展开全文
  • 前段时间我自己写的一个,你看看,先是电路图,后面是代码图是用protues画的,有什么不懂加我QQ478769652//程序测试通过//能使用的功能:输入K1(+,-,*,/)K2,按=得到结果,然后按on/c或0重新开始//不能输入K1+K2+...
  • 运用51单片机制作计算器的源代码

    千次阅读 2019-05-21 19:36:56
    运用51单片机制作计算器的源代码@TOC /* S16 S12 S8 S4分别是123+ S15 S11 S7 S3分别是456- S14 S10 S6 S2分别是789* S13 S9 S5 S1分别是0 CLR = / */ /* 实现两个数的运算,每个数的位数至少可以八位 */ #include&...
  • 13.4 单片机计算器实例

    千次阅读 2016-07-08 06:12:58
    按键和液晶,可以组成我们最简易的计算器。下面我们来写一个简易整数计算器提供给大家学习。为了让程序不过于复杂,我们这个计算器不考虑连加,连减等连续计算,不考虑小数情况。加减乘除分别用上下左右来替代,回车...
  • 在51单片机上实现的完整功能的计算器代码 单片机 , 计算器 , 源代码
  • 4*4键盘扫描 数码管动态扫描显示 完成加减运算 基于51单片机的设计
  • C语言代码 单片机课程设计计算器代码 ,保证可以用。
  • 基于51单片机计算器

    万次阅读 2020-04-04 16:34:15
    继续写一下寒假做的51小项目,这一次是基于AT89C51的计算器,带一个八位密码锁功能。 具体实现了计算器的加减乘除功能,并且自带八位密码锁,输入密码后按“=”确定,错误输入三次密码就...部分代码,受篇幅限制把剩...
  • 基于51单片机计算器设计程序代码(汇编).pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,522
精华内容 608
关键字:

单片机计算器代码