完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
* 利用单片机计算出1!+2!+3!+……+9!的结果。 程序: #include #define INT8U unsigned char #define INT16U unsigned int code INT8U SEG_CODE[] = {0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//段码 code INT8U SEG_WEI[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位码 void delay_ms(INT16U x) { INT8U t; while(x--) for(t = 0; t < 120; t++); }//延时子程序 ***it d=P1^0;//位定义(控制段码信号的"门") ***it w=P1^1; //位定义(控制位码信号的"门") /*unsigned int*/long sum() { unsigned int i , j=1 ; long s=0 ; for(i=1;i<=9;i++) { j*=i; s+=j; } return s ; }//求和子函数 void main() { unsigned int he; he=sum();//在主函数中调用求和子函数 while(1) { P0=0xff; w=1; P0=SEG_WEI[7]; w=0; d=1; P0=SEG_CODE[he%10]; d=0; delay_ms(5);//显示完个位 P0=0xff; w=1; P0=SEG_WEI[6]; w=0; d=1; P0=SEG_CODE[(he/10)%10]; d=0; delay_ms(5);//显示完十位 P0=0xff; w=1; P0=SEG_WEI[5]; w=0; d=1; P0=SEG_CODE[(he/100)%10]; d=0; delay_ms(5);//显示完百位 P0=0xff; w=1; P0=SEG_WEI[4]; w=0; d=1; P0=SEG_CODE[(he/1000)%10]; d=0; delay_ms(5);//显示完千位 P0=0xff; w=1; P0=SEG_WEI[3]; w=0; d=1; P0=SEG_CODE[(he/10000)%10]; d=0; delay_ms(5);//显示完万位 P0=0xff; w=1; P0=SEG_WEI[2]; w=0; d=1; P0=SEG_CODE[(he/100000)%10]; d=0; delay_ms(5);//显示完十万位 P0=0xff; w=1; P0=SEG_WEI[1]; w=0; d=1; P0=SEG_CODE[(he/1000000)%10]; d=0; delay_ms(5);//显示完百万位 P0=0xff; w=1; P0=SEG_WEI[0]; w=0; d=1; P0=SEG_CODE[he/10000000]; d=0; delay_ms(5);//显示完千万位 } } 但是在proteus中仿真却出现这样的结果: |
|
相关推荐
3个回答
|
|
keil C51中unsigned int类型是16位,最大值为65535。unsigned long为32位。long型变量与int型变量相乘是被当成int × int还是long×long,这个需要实际测试一下,这会影响计算结果。局部变量he是unsigned int型,1! + ... + 8! = 46233,< 65535可以准确表示。但+9!之后,结果是409113 > 65535,则高16位丢失,则he=15897,这与你显示的后5位一致。至于前面两个8,可能是除法运算错误导致的,这个我没验证过。
想要正确的结果,最简单的办法是把所有的变量,包括局部变量和全局变量,全部改为unsigned long类型。
最佳答案
|
|
|
|
将变量he改为long型试试
|
|
|
|
好像大部分的8位和16位单片机的编译器整型都是16位的。我也经常不小心弄错数据类型,特别是运算之后。如果有在线调试的功能,设置断点或单步运行,查看变量的值,一般来说会很快定位问题。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
280 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1083 浏览 0 评论
846 浏览 0 评论
886 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
869 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 06:30 , Processed in 0.719904 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号