课设最终版 汪一 黄纬.docx

上传人:b****4 文档编号:3834523 上传时间:2022-11-25 格式:DOCX 页数:32 大小:375.03KB
下载 相关 举报
课设最终版 汪一 黄纬.docx_第1页
第1页 / 共32页
课设最终版 汪一 黄纬.docx_第2页
第2页 / 共32页
课设最终版 汪一 黄纬.docx_第3页
第3页 / 共32页
课设最终版 汪一 黄纬.docx_第4页
第4页 / 共32页
课设最终版 汪一 黄纬.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

课设最终版 汪一 黄纬.docx

《课设最终版 汪一 黄纬.docx》由会员分享,可在线阅读,更多相关《课设最终版 汪一 黄纬.docx(32页珍藏版)》请在冰豆网上搜索。

课设最终版 汪一 黄纬.docx

课设最终版汪一黄纬

工业控制器原理及应用

(1)

课程设计结题报告

 

题目:

称重售卖机

学院:

物流工程学院

专业:

机械电子工程(中荷)

学生1姓名:

汪一

学生2姓名:

黄纬

学生1班级:

机电荷142

学生2班级:

机电荷142

学生1学号:

201410216058

学生2学号:

201410216062

指导老师:

吴滢

实习时间:

2016.12.26—2016.12.30

目录

1、题目要求:

电子秤计价器设计3

1功能要求:

4

2硬件调试:

4

2、分析功能要求,确定方案4

(1)、硬件系统框图设计5

(2)、分析功能,确定方案:

5

(3)、划分设计任务,制定任务时间进度表:

5

(4)确定选用芯片型号,进行相应计算等:

6

(5)I/0口分配:

6

1.PINA0功能6

2.PINA1功能7

3.PINA2功能7

4.PINA3功能7

5.PINA4功能7

6.数码管多功能显示8

3、完整电路原理图设计8

4、PROTUES软件的使用9

1.八位数码管显示9

2.五个按键10

3.一个滑动变阻器(模拟电子称上重量的变化)10

4.一个电容器(用于ADC转换)11

5.一个LED灯(折扣时间显示)11

5、软件设计12

1.程序块划分:

12

2.程序框图13

3.变量定义表:

22

4.编写详细程序:

23

6、软仿真调试及修改33

7、硬件仿真调试及修改33

8、操作说明/使用说明34

键位说明:

34

操作步骤:

34

9、小组分工35

1、题目要求:

电子秤计价器设计

1功能要求:

1)开机后能够显示及修改当前时间。

2)有两种商品AB可供选择,两种商品均可通过按键修改单价。

3)每种商品称重(0-20KG)后,数码管显示所选商品的种类、重量、当前单价和总价,并计入每种商品的累计总价。

4)可通过按键选择显示开机后的每种商品的销售总金额,也可通过按键分别清零每种商品的总金额,重新开始累计。

5)可以设置优惠时间段和优惠折扣,进入优惠时间段后,黄灯亮;称重每种商品后显示种类、重量、当前单价、折扣、折前价和折扣后价格。

2硬件调试:

实现以上五个功能

2、分析功能要求,确定方案

(1)、硬件系统框图设计

1.1

(2)、分析功能,确定方案:

为了程序可以良好的运行和实施,我们需要合理的去分配各个端口及控制功

能的按键。

我们通过PA0-PA4共五个键来进行我们的基本功能控制,ADC电压转

换我们接在PA5,LED灯我们接在PA6。

而PB0-PB8我们用来进行数码管的显示,

最后我们把位置扫描放在PD。

(3)、划分设计任务,制定任务时间进度表:

12月26日(周一)

构思设计程序结构,画程序框图

12月27日(周二)

根据题目要求,编写程序

12月28日(周三)

调试程序,并实现要求功能

12月29日(周四)

软仿真测试,硬件测试

12月30日(周五)

参加答辩,上交实习报告

(4)确定选用芯片型号,进行相应计算等:

1.2

相应计算:

TC2计时器选择CTC模式比较中断。

已知:

CPU=8M;time=1s;f=CLK/64=125kHz;

∴OCR2=125k*2ms-1=250-1=249;

TCNT2=0x00;

OCR2=0xF9.

(5)I/0口分配:

PA0-PA4:

五个控制按键(详细功能见下图)

PA5:

电压测量计

PA6:

ADC数模转换,端口接滑动变阻器

PB0-PB7:

数码管显示端口接七段码数据显示

PD0-PD7:

数据显示位置端口接八个位置显示

1.PINA0功能

按键次数

模式切换显示

模式

0

时钟显示

0

1

重量显示

1

2

单价显示

2

3

折扣时间显示

3

4

折扣显示

4

5

折后价显示

5

6

当前总价显示

6

7

累计总价显示

7

2.PINA1功能

模式

功能

0

分调节+1

1

2

单价调节+1

3

折扣时间调节(开始时间+1)

4

折扣+1

5

6

7

累计总价A清零

3.PINA2功能

模式

功能

0

分调节-1

1

2

单价调节-1

3

折扣时间调节(结束时间+1)

4

折扣-1

5

6

7

累计总价B清零

4.PINA3功能

类型切换

显示

A

0

B

1

 

5.PINA4功能

称重

6.数码管多功能显示

位置

模式一

位置

其他模式

1

小时(十位)

1

AB类型(0or1)

2

小时(个位)

2

3

分钟(十位)

3

模式(1-7)

4

分钟(个位)

4

5

秒(十位)

5

模式对应显示量值

6

秒(个位)

6

7

7

8

8

 

3、完整电路原理图设计

软件要求电路原理图:

如图1.3所示,此为软件要求电路原理图,可以比较清晰地看出图中ATmega16与各器件的连线分布。

可参照I/0口分配的具体值来看。

1.3

4、PROTUES软件的使用

1.八位数码管显示

1.4

共十类显示:

时间,AB类型,模式,重量显示,单价显示,折扣显示,折扣时间显示,折后价显示,当前总价显示,累计总价显示。

2.五个按键

1.5

如图1.5所示,五个按键接在PA口。

3.一个滑动变阻器(模拟电子称上重量的变化)

1.6

4.一个电容器(用于ADC转换)

1.7

5.一个LED灯(折扣时间显示)

1.8

5、软件设计

1.程序块划分:

主程序

voidmain()

延时子程序

voiddelayms(unsignedinti)

端口初始化子程序

voidport_init()

ADC初始化子程序

voidadc_init()

TC初始化子程序

voidtimer_init()

时间处理子程序

voidtime_count()

指示灯子程序

voidDENG()

多功能送缓冲区子程序

voiddisp_choice()

缓冲区子程序

voidvtodisp()

数码管显示子程序

voiddisp(void)

键盘扫描子程序

voidkey_scan()

TC0中断

voidtimer0_comp()

TC2中断

voidtimer2_comp()

ADC中断

voidadc_isr()

2.程序框图

端口初始化

ADC初始化

时钟函数

LED灯函数

显示函数

缓冲区函数

模式选择函数

键盘扫描函数

3.变量定义表:

unsignedcharLed_disbuf[10]

共阴极七段码表示

unsignedcharposition[9]

控制数字显示位置

unsignedchardis_buf[8]

显示缓存

unsignedinttime[3]

时钟(初值为23:

46:

58)

unsignedintweight[2]

重量

unsignedintunit_price[2

单价

unsignedintpresent_price[2]

单次总价(折前价格)

unsignedinttotal_price[2]

累计总价

unsignedcharmulti_disp[4]

多功能送缓冲区值

unsignedintdiscount_time[2]

优惠时间

unsignedintdiscount_price[2]

折后价格

unsignedchardisp_choose=0

功能显示变量

unsignedchardiscount=8

优惠折扣(初始值定义为8折)

unsignedintadc_rel

读取ADC转换结果

unsignedlongadc_val

ADC转换电压值

unsignedcharkind=0

种类A/B,0为A,1为B

unsignedchartime_ok

时间到达一秒的标志

4.编写详细程序:

//工业控制器原理及应用

(1)课程设计

//题目:

称重售卖机设计

//指导教师:

吴滢

//设计者:

汪一201410216058,黄纬201410216062

#include

//变量初始化

unsignedcharLed_disbuf[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

unsignedcharposition[9]={0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F,0XFF};

unsignedchardis_buf[8]={0,0,0,0,0,0,0,0};

unsignedinttime[3]={23,46,58};

unsignedintweight[2]={4,3};

unsignedintunit_price[2]={2,1};//单价

unsignedintpresent_price[2]={0,0};//单次总价(折前价格)

unsignedinttotal_price[2]={0,0};//累计总价

unsignedcharmulti_disp[4]={0,0,0,0};//多功能送缓冲区值

unsignedintdiscount_time[2]={1,5};//优惠时间

unsignedintdiscount_price[2]={0,0};//折后价格

unsignedchardisp_choose=0;//功能显示变量

unsignedchardiscount=8;//优惠折扣

unsignedintadc_rel;

unsignedlongadc_val;

unsignedcharkind=0;//种类A/B,0为A,1为B

unsignedchartime_ok;

//延迟

voiddelayms(unsignedinti)

{

while(i--)

{

unsignedcharj;

for(j=0;j<665;j++);

}

}

//主函数

voidmain()

{

port_init();

timer_init();

adc_init();

SREG=0X80;

while

(1)

{

time_count();

disp_choice();

vtodisp();

disp();

key_scan();

DENG();

}

}

//端口初始化

voidport_init()

{

DDRA=0X40;

PORTA=0X5F;

DDRB=0XFF;

PORTB=0X00;

DDRD=0XFF;

PORTD=0X00;

}

//adc初始化

voidadc_init()

{

ADMUX=0b01000101;

ADCSRA=0b10111101;

SFIOR|=0x60;

}

//TC初始化

voidtimer_init()

{

TCCR0=0x0B;

TCNT0=0x00;

OCR0=0xF9;

TCCR2=0X0B;

TCNT0=0X00;

OCR2=0XF9;

TIMSK=0X82;

}

//时间处理

voidtime_count()

{

if(time_ok==1)

{

time_ok=0;

if(++time[2]>=60)

{

time[2]=0;

if(++time[1]>=60)

{

time[1]=0;

if(++time[0]>=24)time[0]=0;

}

}

}

}

//指示灯

voidDENG()

{

if(time[0]>=discount_time[0]&&time[0]

{

PORTA=0X1F;

}

else

{

PORTA=0X5F;

}

}

//送缓冲区

voiddisp_choice()

{

unsignedinta;

unsignedinti;

unsignedintj;

if(disp_choose==1)

{

a=weight[kind];

for(i=0;i<4;i++)

{

multi_disp[3-i]=a%10;

a=a/10;

}

}

if(disp_choose==2)

{

a=unit_price[kind];

for(i=0;i<4;i++)

{

multi_disp[3-i]=a%10;

a=a/10;

}

}

if(disp_choose==3)

{

j=0;

for(i=0;i<=2;i++)

{

multi_disp[j++]=discount_time[i]/10;

multi_disp[j++]=discount_time[i]%10;

}

}

if(disp_choose==4)

{

a=discount;

for(i=0;i<4;i++)

{

multi_disp[3-i]=a%10;

a=a/10;

}

}

if(disp_choose==5)

{

a=discount_price[kind];

for(i=0;i<4;i++)

{

multi_disp[3-i]=a%10;

a=a/10;

}

}

if(disp_choose==6)

{

a=present_price[kind];

for(i=0;i<4;i++)

{

multi_disp[3-i]=a%10;

a=a/10;

}

}

if(disp_choose==7)

{

a=total_price[kind];

for(i=0;i<4;i++)

{

multi_disp[3-i]=a%10;

a=a/10;

}

}

}

//缓冲区

voidvtodisp()

{

unsignedchari,j=0;

if(disp_choose==0)

{

dis_buf[6]=0;

dis_buf[7]=0;

for(i=0;i<=2;i++)

{

dis_buf[j++]=time[i]/10;

dis_buf[j++]=time[i]%10;

}

}

else

{

{

dis_buf[0]=kind;

dis_buf[1]=0;

dis_buf[2]=disp_choose;

dis_buf[3]=0;

dis_buf[4]=multi_disp[0];

dis_buf[5]=multi_disp[1];

dis_buf[6]=multi_disp[2];

dis_buf[7]=multi_disp[3];

}

}

}

//显示

voiddisp(void)

{

staticunsignedcharposit=0;

PORTD=0xFF;

if(disp_choose==1||disp_choose==5||disp_choose==6||disp_choose==7)

{

if(posit==6)

{

PORTB=(Led_disbuf[dis_buf[posit]]|0x80);

PORTD=position[posit];

}

else

{

PORTB=Led_disbuf[dis_buf[posit]];

PORTD=position[posit];

}

if(++posit>8)posit=0;

}

else

{

PORTB=Led_disbuf[dis_buf[posit]];

PORTD=position[posit];

if(++posit>8)posit=0;

}

}

//键盘扫描

voidkey_scan()

{

unsignedinta=0;

if((PINA&0X1F)!

=0X1F)

delayms(20);

{

if((PINA&0X1F)!

=0X1F)

{

if((PINA&0X01)==0)

//按键一:

功能和显示模式切换

{

disp_choose=disp_choose+1;

if(disp_choose>7)disp_choose=0;

}

if((PINA&0X02)==0)

//按键二

{

if(disp_choose==0)

//在时间模式下,按键二为分加一

{

time[1]=time[1]+1;

if(time[1]>=60)

{

time[1]=0;

if(++time[0]>=24)time[0]=0;

}

}

if(disp_choose==2)

//在单价模式下,按键二为单价加一

{

unit_price[kind]=unit_price[kind]+1;

if(unit_price[kind]>=20)unit_price[kind]=0;

}

if(disp_choose==3)

//在折扣时间模式下,按键二为折扣开始时间加一

{

discount_time[0]=discount_time[0]+1;

if(discount_time[0]>=24)discount_time[0]=0;

}

if(disp_choose==4)

//在折扣模式下,按键二为折扣加一

{

discount=discount+1;

if(discount>=10)discount=1;

}

if(disp_choose==7)

//在累计总价模式下,按键二为A的累计总价清零

{

total_price[0]=0;

}

}

if((PINA&0X04)==0)

{

if(disp_choose==0)

//在时间模式下,按键三为时加一

{

time[0]=time[0]+1;

if(time[0]>=24)time[0]=0;

}

if(disp_choose==2)

//在单价模式下,按键三为单价减一

{

unit_price[kind]=unit_price[kind]-1;

if(unit_price[kind]<=0)unit_price[kind]=19;

}

if(disp_choose==3)

//在折扣时间模式下,按键三为折扣开始时间减一

{

discount_time[1]=discount_time[1]+1;

if(discount_time[1]>=24)discount_time[1]=0;

}

if(disp_choose==4)

//在折扣模式下,按键三为折扣减一

{

discount=discount-1;

if(discount<=1)discount=10;

}

if(disp_choose==7)

//在累计总价模式下,按键二为B的累计总价清零

{

total_price[1]=0;

}

}

if((PINA&0X08)==0)

//按键四为切换A/B键,按一下若当前为A则切换为B,当前为B则切换为A

{

kind^=1;

}

if((PINA&0X10)==0)

//按键五为称重键,按一下则更新一次当前重量值并进行总价计算

{

weight[kind]=adc_val;

weight[kind]=weight[kind]*5000/1024*4;

if(time[0]>=discount_time[0]&&time[0]

{

discount_price[kind]=unit_price[kind]*discount;

present_price[kind]=discount_price[kind]*weight[kind]/10;

total_price[kind]=total_price[kind]+present_price[kind];

}

else

{

discount_price[kind]=unit_price[kind]*10;

present_price[kind]=discount_price[kind]*weight[kind]/10;

total_price[kind]=total_price[kind]+present_price[kind];

}

}

while((PINA&0X1F)!

=0X1F);

}

}

}

//TC0中断服务程序

#pragmainterrupt_handlertimer0_comp:

20

voidtimer0_comp()

{

}

//adc中断服务程序

#pragmainterrupt_handleradc_isr:

15

voidadc_isr()

{

adc_rel=ADCL;

adc_rel|=(unsignedint)(ADCH<<8);

adc_val=(unsignedlong)adc_rel;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1