个人所得税.docx
《个人所得税.docx》由会员分享,可在线阅读,更多相关《个人所得税.docx(16页珍藏版)》请在冰豆网上搜索。
个人所得税
课程设计报告
课程名称:
单片机原理及应用课程设计
设计项目个人所得税计算器
院系信息学院
专业电子信息工程
班级电信二班
学生姓名
学号
起止日期
指导老师
成
绩
评定
项目
权重
成绩
1设计过程中出勤,学习态度
0.2
2课程设计质量与答辩
0.5
3设计报告书写与图纸规范
0.3
总成绩
指导教师评语:
指导老师签名:
年月日
目录
1摘要.................................................4
2系统设计..............................................4
2.1设计要求........................................4.
2.2主控芯片的简介...................................4
3单元电路设计与计算...................................5
3.1主控电路硬件的设计.................................5
3.5按键电路设计...................................5
3.6各电路图样...................................5
4软件设计..............................................5
4.1软件设计思路.....................................5
4.2软件设计原理图...................................5
5程序设计..............................................6
5.1程序调试需要用到的工具...........................6
5.2调试过程.........................................6
5设计总结.............................................6
参考文献................................................6
附录....................................................6
一摘要
单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,他已广泛的应用到我们生活中的各个领域,电子、科技、通信、汽车、工业等。
我们这次设计的个人所得税计算器也是利用单片机制作而成的。
该计算器设计师采用C语言编写,实现了个人所得税的运算,比较实用和方便。
该设计电路是采用STC89C52单片机为主要控制电路,然后使用驱动电路驱动六位LED数码管现实数据,利用4×4矩阵键盘完成电路的实际操作,电路比较简单,但是很使用方便。
关键词:
单片机;个人所得税计算器;STC89C52单片机;串行通信;数码管显示;键盘扫描
二系统设计
2.1设计要求
1、通过键盘输入个人收入情况;
2、按确定键后,通过串口将个人所得税的值显示到电脑上;
3、最大收入值为99999元;
2.2主控芯片简介
AT89C52是一个低电压,高性CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS—51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
3单元电路设计与计算
3.1主控电路硬件的设计
主控电路在整个的系统中充当着最重要的角色,它在整个系统中起到了系统宏观调节的作用,首先主控电路要通过通信接收来自取号机的数据,将客户的取号存入系统之中,同时主控电路还要实时接收来自服务窗口的数据。
对于来自窗口的请求数据,主控芯片接收后立即处理,判断之后将对应的客户号码发送到服务窗口和大厅的显示屏及语音系统。
强大的通信及数据处理就要求主控电路要有强大的处理能力,才能时刻保持整个系统的运行畅通,不会出现数据丢失或发生错误等现象。
完成本次课程设计所需主控芯片有多种多样。
说明如下:
(1)STC89C52RC:
该芯片是采用8051核的ISP在系统可编程芯片,最高工作时钟频率为80MHz,片内含8KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。
(2)STC12C5410AD:
宏晶公司出款的STC12C5410AD单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,兼容传统的8051数据指令代码,但提高了8-10倍的速度。
内部使用了MAX810专用复位电路。
程序存储空间10K,片上集成512字节RAM。
包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时计数器、UART串口、I/O接口、高速AD转换、SPI接口、PCA、看门狗及片内R/C震荡器和外部晶振体振荡电路等模块。
STC89C52系列单片机具有完整的功能模块,对89C52系列单片机有学习基础,理解使用方便,且能够完成基本的实验操作,STC89C52系列内含三个定时器中断,两个外部中断,一个串口中断,比STC89C51多一个定时器2,定时器数量更能满足要求,所以本系统中主控电路采用的是STC公司出款的STC89C52RC单片机。
根据设计要求STC89C52RC单片机最小系统如图6所示:
图6单片机最小系统
3.3按键电路设计
图11单片机独立按键电路
如图11所示:
我们的按键电路采用的是独立式键盘,此设计方便设计,K1,K2,K3,K4,一边端口右接GND,另外一边分别连接单片机的I/O端口。
独立键盘判键速度快,便于顾客叫号时等待时间短,硬软件结构简单,利于我们设计者设计。
当一个按键按下时,对应I/O的口就得到了一个低电平。
四软件设计
4.1软件设计思路
初始化串口
设置显示数码管
按键检测
设置数据
确认按键是否按下
输出数据到串口
4.2软件设计原理图
图、LED显示及驱动电路
图、单片机电路
图、矩阵按键电路
五程序设计
5.1程序调试需要用到的工具
元件名称
类型或量程
数量
芯片
Rst89C52
1片
5.2调试过程
将用keil编译产生的HEX文件下载到单片机开发板中,通过外围电路接入一个已知的被测电阻,看数码管上的显示数值是否接近已知的电阻值,若不对,则反复调试程序,直到正确为止。
AD的分辨率只有八位,分辨率小,所以测量小电阻的时候误差小,随测量电阻的
变大误差变大。
六设计总结
这次单片机课程设计意义非同一般,把我们从单深入的理论编程到硬件软件综合实现一个使用的电路。
通过这学期的单片机的学习,知道了单片机在实际应用中占据很重要的作用,也了解单片机本身的功能,用编程控制;也了解了单片机的一些扩展功能。
通过这次设计,我们更深入地了解到单片机的使用原理和功能。
为期两周的设计中,我们看到很多同学都很努力,很认真,我们也不敢懈怠。
虽说时间有点仓促,但老师和同学们夜以继日在解决问题,我们做电阻测量的设计中也遇到些许问题,但通过他人的指点,并查阅很多有价值的书籍,我们从中认识了不少。
也增强了我们自己发现问题解决问题的能力。
还有在编程的时候要仔细,要实现一个完整的功能就要考虑全面,在测试程序的时候要善于发现错误,而且可能是一些小问题,比如说把立即数和地址混用,这是很常见的。
两周的设计完满结束了,经过我们自己的努力和同学的帮忙终于有了成果,特别离不开指导老师的悉心教导,我受益匪浅,相信他的工作作风和知识筑成都是我们学习榜样,给我很大的启迪。
感谢这些老师不畏辛劳,热心精心的指导。
在这里向他们说声谢谢,你们辛苦了。
参考文献
1谢四连. 《单片微机原理与应用》.
附录
#include
#defineucharunsignedchar
#defineuintunsignedintcharledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
sbitADDR0=P1^0;
sbitADDR1=P1^1;
sbitADDR2=P1^2;
sbitADDR3=P1^3;
sbitENLED=P1^4;
sbithang1=P2^3;
sbithang2=P2^2;
sbithang3=P2^1;
sbithang4=P2^0;
sbitlie1=P2^4;
sbitlie2=P2^5;
sbitlie3=P2^6;
sbitlie4=P2^7;
unsignedlongsui;
ucharxianshi[5];
voiddelay_ms(unsignedintcnt);
ucharkeyscan()//键盘检测
{
ucharnum=0xff;
hang1=0;
if(lie1==0)
{
delay_ms(10);
if(lie1==0)
{
num=1;
}}
if(lie2==0)
{
delay_ms(10);
if(lie2==0)
{
num=2;
}}
if(lie3==0)
{
delay_ms(10);
if(lie3==0)
{
num=3;
}}
hang1=1;
hang2=0;
if(lie1==0)
{
delay_ms(10);
if(lie1==0)
{
num=4;
}
}
if(lie2==0)
{
delay_ms(10);
if(lie2==0)
{
num=5;
}}
if(lie3==0)
{
delay_ms(10);
if(lie3==0)
{
num=6;
}}
hang2=1;
hang3=0;
if(lie1==0)
{
delay_ms(10);
if(lie1==0)
{
num=7;
}}
if(lie2==0)
{
delay_ms(10);
if(lie2==0)
{
num=8;
}}
if(lie3==0)
{
delay_ms(10);
if(lie3==0)
{
num=9;
}}
hang3=1;
hang4=0;
if(lie1==0)
{
delay_ms(10);
if(lie1==0)
{
num=0;
}}
if(lie2==0)
{
delay_ms(10);
if(lie2==0)
{
num=10;
}}
if(lie3==0)
{
delay_ms(10);
if(lie3==0)
{
num=11;
}}
hang4=1;
returnnum;
}
voidshumaguan()//在数码管上显示
{
ADDR0=0;ADDR1=0;ADDR2=0;
P0=xianshi[0];
delay_ms
(2);
P0=0xff;
ADDR0=1;ADDR1=0;ADDR2=0;
P0=xianshi[1];
delay_ms
(2);
P0=0xff;
ADDR0=0;ADDR1=1;ADDR2=0;
P0=xianshi[2];
delay_ms
(2);
P0=0xff;
ADDR0=1;ADDR1=1;ADDR2=0;
P0=xianshi[3];
delay_ms
(2);
P0=0xff;
ADDR0=0;ADDR1=0;ADDR2=1;
P0=xianshi[4];
delay_ms
(2);
P0=0xff;
}
unsignedlongsheding;
unsignedlongshuju[10];
voidfasong(unsignedcharx)//发送到串口
{
SBUF=x;
while(!
TI);
TI=0;
}
voidmain()
{ucharkey_temp;
ADDR3=1;
ENLED=0;
SCON=0x50;//串口初始化
PCON=0x00;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TI=0;
RI=0;
TR1=1;
while
(1)
{
xianshi[4]=ledcode[sheding/10000];
xianshi[3]=ledcode[sheding/1000%10];
xianshi[2]=ledcode[sheding/100%10];
xianshi[1]=ledcode[sheding/10%10];
xianshi[0]=ledcode[sheding%10];
key_temp=keyscan();
if(key_temp!
=0xff)
{
if(key_temp==11)
{
sheding=0;
shuju[0]=0;
shuju[1]=0;
shuju[2]=0;
shuju[3]=0;
shuju[4]=0;
}
if(key_temp<=9)
{
shuju[0]=shuju[1];
shuju[1]=shuju[2];
shuju[2]=shuju[3];
shuju[3]=shuju[4];
shuju[4]=key_temp;
sheding=shuju[0]*10000+shuju[1]*1000+shuju[2]*100+shuju[3]*10+shuju[4];
}
if(key_temp==10)
{
if(sheding<=1500)
{
if(sheding>0)
{
sui=sheding*0.03+0;
}
elsesui=0;
}
elseif((sheding>1500)&&(sheding<=4500))
{
sui=sheding*0.1-105;
}
elseif((sheding>4500)&&(sheding<=9000))
{
sui=sheding*0.2-555;
}
elseif((sheding>9000)&&(sheding<=35000))
{
sui=sheding*0.25-1005;
}
elseif((sheding>35000)&&(sheding<=550000))
{
sui=sheding*0.3-2775;
}
elseif((sheding>55000)&&(sheding<=80000))
{
sui=sheding*0.35-5505;
}
elseif(sheding>80000)
{
sui=sheding*0.45-13505;
}
fasong(sui/10000+0x30);
fasong(sui/1000%10+0x30);
fasong(sui/100%10+0x30);
fasong(sui/10%10+0x30);
fasong(sui%10+0x30);
fasong(32);
}
while(keyscan()!
=0xff);
}
shumaguan();
}}
voiddelay_ms(unsignedintcnt)//延时
{
unsignedchari;
while(cnt--)
{
for(i=0;i<=110;i++);
}
}