- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Main.c
/*-----------------------------------------------
名称:液晶显示计算器
编写:人言者
日期:2013.5
内容:由于单片机浮点数限制,可以计算6位数字运算,大于这个长度,用科学计数法表示
小数位精度后6位,大于6位按四舍五入
------------------------------------------------*/
#includereg52.h //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#includestdio.h
#include1602.h
#includedelay.h
#includekeyboard.h
#includemimasuo.h
#define uchar unsigned char
void calculate(void);
sbit SPK=P2^3;
unsigned char num,i,sign;
unsigned char s; //通用循环变量
bit firstflag; //输入为第一个数据还是第二个数据的标志
float a=0,b=0; //输入的数据缓冲器及运算的中间变量
void Timer0_Init()
{
TH0=(65536-7000)/256;
TL0=(65536-7000)%256;
EA=0;
TR0=1;
ET0=1;
}
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
LCD_Init(); //初始化液晶屏
Timer0_Init();
DelayMs(10); //延时用于稳定,可以去掉
LCD_Write_String_Move(0,0,Welcome use Chu Zhe Rong Calculator ); //写入第一行信息,主循环中不再更改此信息,所以在while之前写入
for(s=0;s30;s++)
{
DelayMs(250); //0.5S向右移动一格,结合for语句共延时5s
LCD_Write_Com(0x18);//左平移画面 0x1C 是右平移
} /* */
LCD_Clear(); //清屏
mimasuo(); //密码锁程序
while (1) //主循环
{
num=KeyPro(); //扫描键盘
if(num!=0xff) //如果扫描是按键有效值则进行处理
calculate();
}
}
void calculate(void)
{
unsigned char temp[16]; //最大输入16个
if(i==0) LCD_Clear(); //输入是第一个字符的时候需要把液晶屏清空,方便观看
if((+==num)|| (i==16) || (-==num) || (x==num)|| (/==num) || (===num))//输入数字最大值16,输入符号表示输入结束
{
i=0; //计数器复位,记一次性输入的数据个数,液晶一行只能显示16个,所以i=16
if(firstflag==0) //如果是输入的第一个数据,赋值给a,并把标志位置1,到下一个数据输入时可以跳转赋值给b
{
sscanf(temp,%f,a);
firstflag=1;
}
else
sscanf(temp,%f,b);
for(s=0;s16;s++) //赋值完成后把缓冲区清零,防止下次输入影响结果
temp[s]=0;
LCD_Write_Char(0,1,num);
///////////////////////
if(num!==) //判断当前符号位并做相应处理
sign=num; //如果不是等号记下标志位
else
{
firstflag=0;
switch(sign) //检测到输入=号,判断上次读入的符合
{
case +:a
您可能关注的文档
最近下载
- 新时代人文经济学的基本理论框架.docx VIP
- 人工智能引论知到智慧树期末考试答案题库2024年秋浙江大学.docx VIP
- 2025年电工作业低压电工通用考试题库.docx VIP
- 研究智慧供热系统建设方案.pptx VIP
- 2024年低压电工作业模拟考试题库试卷及答案.doc VIP
- 智慧供热系统建设方案.pptx VIP
- 马工程教材《组织行为学》课件 第三章 群体心理与行为.pptx VIP
- 2025年低压电工作业模拟考试题库试卷及答案.docx VIP
- 5.2 放射性元素的衰变(教学设计)高中物理(人教版2019选择性必修第三册).docx VIP
- 国家开放大学《证券投资分析》形考任务(1-5)试题及答案解析.docx VIP
文档评论(0)