描述

支持最大八位的无符号长整型数值计算

#include《iom16v.h》

#include《macros.h》

//#include《stdio.h》

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

#define EA SREG|=BIT(7)

uchar temp,old,key_turn,flag=0;

ulong datA=0,datB=0;

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

const uchar tab[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

extern uchar dat[8]={0,0,0,0,0,0,0,0};

extern uchar dat_right[]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};

void delay(uint z)

{

while(z--);

}

void display(uchar z)

{

uchar i;

while(z--)

for(i=0;i《8;i++)

{

PORTB=wela[i];

PORTD=tab[dat_right[i]];

delay(30);

PORTB=0XFF;

}

}

void clean_junk()

{

uchar i,p=0;

for(i=0;i《8;i++)

{

dat_right[i]=0x0a;

}

for(i=0;i《8;i++)

{

if(dat[i]》0)p=1;

if(p)dat_right[i]=dat[i];

}

}

void delete()

{

uchar i;

for(i=0;i《8;i++)

{

dat[i]=0;

}

clean_junk();

}

void disan_he()

{

ulong i;

i=dat[0]*1e7+dat[1]*1e6+dat[2]*1e5+dat[3]*1e4+dat[4]*1e3+dat[5]*1e2+dat[6]*1e1+dat[7];

if(flag)datB=i;

else datA=i;

flag=1;

delete();

}

void disan_fen()

{

dat[0]=datA/1e7;

dat[1]=datA%10000000/1000000;

dat[2]=datA%1000000/100000;

dat[3]=datA%100000/10000;

dat[4]=datA%10000/1000;

dat[5]=datA%1000/100;

dat[6]=datA%100/10;

dat[7]=datA%10;

flag=0;

}

void move()

{

uchar i;

if(temp》0&temp《0x0b)

{

for(i=0;i《8;i++)

{

dat[i]=dat[i+1];

}

if(temp==0x0a){dat[0]=0;temp=0;}

dat[7]=temp;temp=0;

}

}

void clean()

{

uchar i;

flag=0;

for(i=0;i《8;i++)

{

dat[i]=0;

}

temp=0;

old=0;

datA=0;

datB=0;

}

void disan()

{

if(temp》0&temp《0x11)switch(temp)

{

case 0x0e:clean();break;

case 0x0b:old=temp;temp=0;disan_he();break;

case 0x0c:old=temp;temp=0;disan_he();break;

case 0x0d:old=temp;temp=0;disan_he();break;

case 0x10:old=temp;temp=0;disan_he();break;

case 0x0f:switch(old)

{

case 0x0b:if(flag)disan_he();datA=datA/datB;old=0;temp=0;disan_fen();break;

case 0x0c:if(flag)disan_he();datA=datA*datB;old=0;temp=0;disan_fen();break;

case 0x0d:if(flag)disan_he();datA=datA-datB;old=0;temp=0;disan_fen();break;

case 0x10:if(flag)disan_he();datA=datA+datB;old=0;temp=0;disan_fen();break;

default:temp=0;old=0;break;

}break;

default:move();temp=0;break;

}

// disan_fen();delete();

}

void diskey()

{

uchar i,n;

const uchar code[]={0xFE,0xFD,0xFB,0xF7};

if(temp==0x00)for(i=0;i《4;i++)

{

PORTA=code[i];

temp=PINA;

if(~temp&0xf0)i=6;

while(~PINA&0xf0)display(1);

PORTA=0xff;

}

if(temp》0x10)switch(temp)

{

case 0xEE:temp=0x07;break;

case 0xDE:temp=0x08;break;

case 0xBE:temp=0x09;break;

case 0x7E:temp=0x0b;break;

/

case 0xED:temp=0x04;break;

case 0xDD:temp=0x05;break;

case 0xBD:temp=0x06;break;

case 0x7D:temp=0x0c;break;

//

case 0xEB:temp=0x01;break;

case 0xDB:temp=0x02;break;

case 0xBB:temp=0x03;break;

case 0x7B:temp=0x0d;break;

case 0xE7:temp=0x0e;break;

case 0xD7:temp=0x0a;break;

case 0xB7:temp=0x0f;break;

case 0x77:temp=0x10;break;

/

default:temp=0x00;break;

}

disan();

}

void main()

{

MCUCSR|= 1《《JTD; //禁用jtag功能

MCUCSR|= 1《《JTD; //再次禁用jtag功能生效

DDRC=0XFF;

DDRB=0XFF;

DDRD=0XFF;

DDRA=0X0F;

while(1)

{

display(1);

diskey();

clean_junk();

}

}

打开APP精彩内容

点击阅读全文

mega16单片机c语言编程,mega16单片机科学计算器程序源代码相关推荐

  1. 单片机c语言编程下载,单片机C语言编程.doc

    单片机C语言编程.doc 单片机C语言编程指令格式 功能简述 字节数 周期 一.数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,Ri ...

  2. 51单片机c语言编程函数,单片机C语言教程:C51函数

    其实一直出现在例子中的 main()也算是一个函数,只不过它比较特殊,编译时以它做为程序的开始段.有了函数C 语言就有了模块化的优点,一般功能较多的程序,会在编写程序时把每项单独的功能分成数个子程序模 ...

  3. 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)

    一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...

  4. pic16f616单片机C语言编程,PIC16F616单片机学习经验总结

    1.前言 为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大 ...

  5. 单片机c语言编程规则,单片机C语言编程规则

    §5 编写高质量的单片机C程序 高质量的单片机C程序代码运行效率高.可读性和可维护性强.在编写小型的单片机程序时,代码质量的重要性可能不是很明显.但如果要编写较大规模的程序,特别是多人合作编写程序时, ...

  6. c52单片机c语言编程,c52单片机c语言编程怎样实现阴历查询

    原创 农历转阴历 c语言收藏 /* 2008.5.3-2008.5.8 呵呵!最近没什么是,打算自己做个万年历,下面是我在网上下的一个程序, void  solar_lunar(unsigned in ...

  7. efm8系列单片机c语言编程,EFM8单片机用Keil编程,头文件怎么写?

    找到头文件了,如下:(芯片为Silicon Laboratories的EFM8UB10F16G) 需要用到P1口,头文件中这样定义P1口"SI_SFR (P1,        0x90); ...

  8. c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

    原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...

  9. 访问外部扩展C语言编程,单片机C语言编程(系统扩展IC)8.ppt

    单片机C语言编程(系统扩展IC)8 第8章 单片机系统扩展 第8章 单片机系统扩展 目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 8.4 串行扩展总线接 ...

最新文章

  1. docker 如何删除<none>镜像
  2. ppt复制切片器_这6个新手必学的PPT技能,让你效率提升10倍!套模板都比别人快...
  3. 一句话简单总结李航统计学习法各算法
  4. 深入理解Fabric环境搭建的详细过程(转)
  5. MFC的来龙去脉-----消息处理,找处理函数
  6. 【计算机组成原理】数据表示和运算
  7. Windows Mobile logo测试介绍
  8. Forward Plus Rendering
  9. SQL.H 通过此文件寻找sqlAPI编程的一种捷径
  10. 厦门GDP超过万亿需要多少年时间?
  11. 统计一个字符串中英文字母、空格、数字和其它字符的个数
  12. 【译文 Part 1】NEO vs. ETH--为什么NEO可能是2018最强数字货币?
  13. Linux系统负载查询
  14. 计算机原理教程 pdf,《计算机组成原理》教程 概述.pdf
  15. Axure9桌面无法显示图标
  16. matlab 数字波束合成,dbf数字波束合成
  17. 快速寻找研究方向+发文章的方法!!按头安利!
  18. python字典求平均值_Python
  19. macOS使用快捷键控制安卓手机音乐播放器
  20. 【计算机毕业设计】Java ssm 高校运动会管理系统(开题+源码+论文)

热门文章

  1. Corona图形特效-着色和渐变
  2. RabbitMQ安装 win
  3. 人脸识别原理详细讲解
  4. nbx2000安装教程
  5. 长时储能系统-未来储能系统发展方向
  6. android 手机最大尺寸,手机尺寸怎么选择 手机尺寸多大最合适【详细介绍】
  7. [RK3588 Android12]系统桌面添加时钟日期部件
  8. axios二次封装以及API接口统一管理
  9. python学习教程哪个好_Python入门视频看哪个好?适合初学者的教学视频推荐
  10. tf.keras 05: 使用Keras保存和加载不同格式的模型