级动化班
题目 利单片机芯片STC89C52四位八段阳数码已制作电路板等器件设计制作计算器
二务求 求计算器实现加减四种运算具体
1 加法:四位整数加法计算结果超八位显示计算错误
2 减法:四位整数减法计算结果超八位显示计算错误
3 法:位整数法计算结果超四位显示计算错误
4 法:整数法
5 清功
三课程设计简述
总体设计思路简述
1系统设计功求初步确定设计系统控模块显示模块键扫描接口电路三模块组成控芯片STC89C52单片机
2键盘电路采4*4矩阵键盘电路
3显示模块采阳极数码构成
四硬件电路
五软件编程部份
#include
#define uchar unsigned char
#define uint unsigned int
uchar code num[]{0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x000x40} 阴极
0 1 2 3 4 5 6 7 8 9 熄灭
uchar code loc[]{0xff0xfe0xfd0xfb0xf7}
uchar code ero[]{0x790x500x5c}
uchar code num[]{0xc00xf90xa40xb00x990x920x820xf80x800x900xff0x40} 阳极
uchar code loc[]{0x000x800x400x200x10}
uchar code ero[]{~0x79~0x50~0x5c}
uint n0n10n20 赋初值
uchar flag0 计算类型选择关键字
void delay(int t)
void display(int n)
void error()
main()
{
while(1)
{
uchar temp
第行检测
P30xfe
tempP3
temptemp&0xf0
if(temp0xf0)
{
delay(10)
tempP3
temptemp&0xfe
if(temp0xfe)
{
tempP3
switch(temp)
{
case 0xeen10n20n0flag0break 清零
case 0xden110*n1+0nn1break 0
case 0xbe if(flag1)nn2+n1
if(flag2)nn2n1
if(flag3)nn2*n1
if(flag4)nn2n1
n10
break
case 0x7e +
n2n1n10
flag1break
}
while(temp0xf0)
{
tempP3
temptemp&0xf0
}
}
}
扫描第二行
P30xfd
tempP3
temptemp&0xf0
if(temp0xf0)
{
delay(10)
tempP3
temptemp&0xf0
if(temp0xf0)
{
tempP3
switch(temp)
{
case 0xedn110*n1+1nn1break 4
case 0xddn110*n1+2nn1break 5
case 0xbdn110*n1+3nn1break 6
case 0x7d
n2n1n10
flag2break
}
while(temp0xf0)
{
tempP3
temptemp&0xf0
}
}
}
扫描第三行
P30xfb
tempP3
temptemp&0xf0
if(temp0xf0)
{
delay(10)
tempP3
temptemp&0xf0
if(temp0xf0)
{
tempP3
switch(temp)
{
case 0xebn110*n1+4nn1break
case 0xdbn110*n1+5nn1break
case 0xbbn110*n1+6nn1break
case 0x7b *
n2n1n10
flag3break
}
while(temp0xf0)
{
tempP3
temptemp&0xf0
}
}
}
扫描第四行
P30xf7
tempP3
temptemp&0xf0
if(temp0xf0)
{
delay(10)
tempP3
temptemp&0xf0
if(temp0xf0)
{
tempP3
switch(temp)
{
case 0xe7n110*n1+7nn1break 7
case 0xd7n110*n1+8nn1break 8
case 0xb7n110*n1+9nn1break 9
case 0x77
n2n1n10
flag4break
}
while(temp0xf0)
{
tempP3
temptemp&0xf0
}
}
}
display(n)
}
}
延时函数
void delay(int t)
{
int xy
for(x0x
数码显示
void display(int n)
{
溢出处理
uchar gsbq
int abs
if((n>9999)||(n<999))
error()
正数
if((n>0)&&(n<9999))
{
gn10
sn1010
bn10010
qn100010
P0num[g]
delay(5)
P2loc[4]
delay(2)
P2loc[0]
delay(3)
if(n>10)
{
P0num[s]
P2loc[3]
delay(2)
P2loc[0]
delay(3)
}
if(n>100)
{
P0num[b]
P2loc[2]
delay(2)
P2loc[0]
delay(3)
}
if(n>1000)
{
P0num[q]
P2loc[1]
delay(2)
P2loc[0]
delay(3)
}
}
负数
if((n<0)&&(n>999))
{
absn
gabs10
sabs1010
babs10010
qabs100010
P0num[g]
P2loc[4]
delay(2)
P2loc[0]
delay(2)
if((abs1010>0)||(abs10010>0))
{
P0num[s]
P2loc[3]
delay(2)
P2loc[0]
delay(2)
if((abs10010>0))
{
P0num[b]
P2loc[2]
delay(2)
P2loc[0]
delay(2)
if((abs100010>0))
{
P0num[q]
P2loc[1]
delay(2)
P2loc[0]
delay(2)
}
else
{
P0num[11]
P2loc[1]
delay(2)
P2loc[0]
delay(2)
}
}
else
{
P0num[11]
P2loc[2]
delay(2)
P2loc[0]
delay(2)
}
}
else
{
P0num[11]
P2loc[3]
delay(2)
P2loc[0]
delay(2)
}
}
}
溢出显示
void error()
{
P2loc[1]
P0ero[0]
delay(2)
P2loc[0]
delay(3)
P2loc[2]
P0ero[1]
delay(2)
P2loc[0]
delay(3)
P2loc[3]
P0ero[1]
delay(2)
P2loc[0]
delay(3)
P2loc[4]
P0ero[2]
delay(2)
P2loc[0]
delay(3)
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档