硬件课程设计报告剖析(4)

2019-06-02 16:07

时进入值初始化 }

else if(display_DS1302_count==2) //调日期模式 {

DS1302Write(0x8e,0x00); //写保护关

DS1302Write(DS1302_DAY_WRITE,(date/10*16+date)); //2011年1月1日星期6

DS1302Write(DS1302_MONTH_WRITE,(month/10*16+month)); DS1302Write(DS1302_YEAR_WRITE,(year/10*16+year));

DS1302Write(0x8e,0x80); //写保护开

display_DS1302_count=0; //正常显示时间 date_count=0; //将调日期进入值初始化 }

else if(display_DS1302_count==3) //调星期模式 {

DS1302Write(0x8e,0x00); //写保护关

DS1302Write(DS1302_WEEK_WRITE,week);

DS1302Write(0x8e,0x80); //写保护开

display_DS1302_count=0; //正常显示时间 week_count=0; //将调日期进入值初始化 }

else if(display_DS1302_count==4) //写入定时数据 {

Sector_erase(0X2E00);

Byte_program(0X2E00, timing_s); Byte_program(0X2E01, timing_min); Byte_program(0x2E02, timing_h);

display_DS1302_count=0; //正常显示时间 timing_count1=0; //将调时进入值初始化 }

P3|=BIT(3); }

16

2、简易计算机: /****主程序***/ void main(void) {

init();//初始化

while(1) //整个系统大循环,让计算器一直处于工作状态 {

while(1) //第一运算数扫描 {

if(ac==1) break; //若清零,则退出输入

if((keyscan()!='N')&&((num>=0&&num<=9)||num=='.')) //记录按下的数字 {

if(newcalc==1) //新一次运算开始 {

lcdwrite_com(0x01);//清屏 newcalc=0;

lcd_setxy(0,0); }

if(keynum1<=7) //限制输入位数 {

if(num=='.') {

lcdwrite_data('.'); //显示小数点 } else

lcdwrite_num1(num); //转化为数字编码进行显示

num1[keynum1]=num;

keynum1++; } }

else

if(num=='+'||num=='-'||num=='*'||num=='/'||num=='='||num=='^'||keysqrt==0)

{

if(keynum1==0&&num1[0]==0) //若直接输入运算符而没有输入数字则执行连续运算 {

here:ans1=ans; //上次运算结果,初始化值为0

17

sign=num;

lcdwrite_com(0x01); delayms(5); lcd_setxy(0,0);

lcdwrite_float(ans1); //写第一计算数

if(sqrtflag2!=1&&num!='N')

lcdwrite_data(num); //利用ascll码直接写符号

break; //跳出while

}//第一个if语句解决无输入数或已有输入数进行第二次运算

for(i=0;keynum1>0;i++) //计算按下的数字的大小 {

if(num1[i]!='.')

ans1=ans1*10+num1[i]; //非小数部分计算大小 else if(num1[i]=='.') break; keynum1--; }

//小数部分计算大小

for(keynum1--,i++,j=0;keynum1>0;j++,i++,keynum1--) point=point*10+num1[i]; //共有J位小数 for(;j>0;j--)

point*=0.1;

ans1=ans1+point;//第一输入数的最终大小

sqrtflag1=0; //清除开方标志 sqrtflag2=0;//清除开方标志

if(keysqrt==0) //计算开方 {

delayms(5);

if(keysqrt==0) {

ans=sqrt(ans1); sqrtflag1=1; //第一次开方(仅是标记,不是运算为了跳过第二次输入)

lcdwrite_data(0xe8);//写开方符号 while(keysqrt==0);

18

}

}

delayms(10);

while(keysqrt==0);

break; //跳出while可直接显示结果 } }

sign=num;

lcdwrite_data(num);

break; //输入运算符号则退出第一运算数的输入

while(1) {

if(ac==1) break; //若清零,则退出输入

if(sqrtflag1==1) //若第一次按键为开方,则直接显示结果 {

break;

}

if((keyscan()!='N')&&((num>=0&&num<=9)||num=='.')) //记录按下的数字 {

if(keynum2<=7) {

if(num=='.') {

lcdwrite_data('.'); //显示小数点 } else

lcdwrite_num1(num); num2[keynum2]=num;

keynum2++; } }

else if(num=='='||keysqrt==0) {

sqrtflag2=0;//清除开方标志 if(keysqrt==0) //进入开方 {

delayms(5);

19

if(keysqrt==0) {

sqrtflag2=1; //开方标志

lcdwrite_data(0xe8); //写开方符号 while(keysqrt==0); delayms(10);

while(keysqrt==0); } }

point=0;//用于第二输入数计算小数部分和。

for(i=0;keynum2>0;i++) //计算按下的数字的大小 {

if(num2[i]!='.')

ans2=ans2*10+num2[i]; else if(num2[i]=='.') break; keynum2--; }

for(keynum2--,i++,j=0;keynum2>0;j++,i++,keynum2--) point=point*10+num2[i]; for(;j>0;j--) point*=0.1; if(sqrtflag2!=1)

lcdwrite_data(num); ans2=ans2+point;

break; //输入等于号则退出第二运算数的输入 } else

if(num=='+'||num=='-'||num=='*'||num=='/'||num=='^') {

point=0;

for(i=0;keynum2>0;i++) //计算按下的数字的大小

{

if(num2[i]!='.')

ans2=ans2*10+num2[i]; else if(num2[i]=='.') break; keynum2--; }

20


硬件课程设计报告剖析(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:微积分的思想和方法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: