#include <reg52.h>
#include "anjian.h"
/*数码管位选io口*/
sbit x = P2^2;
sbit y = P2^3;
sbit z = P2^4;
char code smgduan[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};/*0~15的显示*/
char code smgxiaoshu[10] = {0xbf, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87,
0xff, 0xef};/*0~9带小数点*/
void Smgxy();
void SMG(int a, int b)/*数码管组函数*/
{
Smgxy();
delay(5);
switch(a)
{
case(1): x = 0; y = 0; z = 0; break;
case(2): x = 1; y = 0; z = 0; break;
case(3): x = 0; y = 1; z = 0; break;
case(4): x = 1; y = 1; z = 0; break;
case(5): x = 0; y = 0; z = 1; break;
case(6): x = 1; y = 0; z = 1; break;
case(7): x = 0; y = 1; z = 1; break;
case(8): x = 1; y = 1; z = 1; break;
}/*位选完成*/
P0 = smgduan[b];
delay(150);
}
void Smgxy()/*数码管消影*/
{
int a = 8;
for(a; a > 0; a--)
{
switch(a)
{
case(1): x = 0; y = 0; z = 0; break;
case(2): x = 1; y = 0; z = 0; break;
case(3): x = 0; y = 1; z = 0; break;
case(4): x = 1; y = 1; z = 0; break;
case(5): x = 0; y = 0; z = 1; break;
case(6): x = 1; y = 0; z = 1; break;
case(7): x = 0; y = 1; z = 1; break;
case(8): x = 1; y = 1; z = 1; break;
}/*位选完成*/
P0 = 0x00;
}
}
void smg_W(int a)
{
Smgxy();
switch(a)
{
case(1): x = 0; y = 0; z = 0; break;
case(2): x = 1; y = 0; z = 0; break;
case(3): x = 0; y = 1; z = 0; break;
case(4): x = 1; y = 1; z = 0; break;
case(5): x = 0; y = 0; z = 1; break;
case(6): x = 1; y = 0; z = 1; break;
case(7): x = 0; y = 1; z = 1; break;
case(8): x = 1; y = 1; z = 1; break;
}/*位选完成*/
}
void smg_D(float c)/*多个数码管显示*/
{
if (c == 0)
{
smg_W(1);
P0 = 0x3f;
}
/*正数*/
if (c > 0)
{
int a;/*计算几位小数*/
int d;
int b;
long int Z;
float X;
long int C;
Z = (long int)(c - 0);
X = c - Z;
if (Z > 0)
{
while (X > 0)
{
c = c * 10;
Z = (long int)(c - 0);
X = c - Z;
a++;
if (a > 4)/*限制小数后几位*/
{
break;
}
}
b = a - 1;
C = (long int)(c - 0);
for (a; a > 1; a--)
{
C = C;
}
for (d = 1; C > 0; d++)
{
SMG(d, C % 10);
if (d == b + 1)
{
smg_W(d);
P0 = smgxiaoshu[C % 10];
}
C = C / 10;
}
}
if (Z == 0)
{
while (X > 0)
{
c = c * 10;
Z = (long int)(c - 0);
X = c - Z;
a++;
if (a > 4)/*限制小数后几位*/
{
break;
}
}
b = a - 1;
C = (long int)(c - 0);
for (a; a > 1; a--)
{
C = C;
}
for (d = 1; C > 0; d++)
{
SMG(d, C % 10);
C = C / 10;
}
smg_W(d);
P0 = smgxiaoshu[0];
}
}/*end of */
/*负数*/
if (c < 0)
{
int a;/*计算几位小数*/
int d;
int b;
long int Z;
float X;
long int C;
c = -c;
Z = (long int)(c - 0);
X = c - Z;
if (Z > 0)
{
while (X > 0)
{
c = c * 10;
Z = (long int)(c - 0);
X = c - Z;
a++;
if (a > 4)/*限制小数后几位*/
{
break;
}
}
b = a - 1;
C = (long int)(c - 0);
for (a; a > 1; a--)
{
C = C;
}
for (d = 1; C > 0; d++)
{
SMG(d, C % 10);
if (d == b + 1)
{
smg_W(d);
P0 = smgxiaoshu[C % 10];
}
C = C / 10;
}
smg_W(d);
P0 = 0x40;
}/*end of */
if (Z == 0)
{
while (X > 0)
{
c = c * 10;
Z = (long int)(c - 0);
X = c - Z;
a++;
if (a > 4)/*限制小数后几位*/
{
break;
}
}
b = a - 1;
C = (long int)(c - 0);
for (a; a > 1; a--)
{
C = C;
}
for (d = 1; C > 0; d++)
{
SMG(d, C % 10);
C = C / 10;
}
smg_W(d);
P0 = smgxiaoshu[0];
delay(150);
smg_W(d + 1);
P0 = 0x40;
}
}
delay(150);
Smgxy();
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
计算器带小数.zip (27个子文件)
anjian.c 1KB
sjzh.h 0B
带小数计算器.uvopt 6KB
Objects
带小数计算器.hex 12KB
带小数计算器 19KB
带小数计算器.build_log.htm 996B
anjian.obj 2KB
smg.obj 14KB
带小数计算器.lnp 162B
STARTUP.obj 819B
sjzh.__i 116B
main.obj 8KB
anjian.__i 122B
sjzh.c 213B
STARTUP.A51 6KB
带小数计算器.uvgui.Lenovo 85KB
Listings
anjian.lst 3KB
main.lst 6KB
smg.lst 9KB
STARTUP.lst 14KB
sjzh.lst 989B
带小数计算器.m51 25KB
smg.h 160B
带小数计算器.uvproj 14KB
smg.c 4KB
anjian.h 154B
main.c 2KB
共 27 条
- 1
资源评论
染迹
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功