课设最终版 汪一 黄纬文档格式.docx
- 文档编号:16740773
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:32
- 大小:375.03KB
课设最终版 汪一 黄纬文档格式.docx
《课设最终版 汪一 黄纬文档格式.docx》由会员分享,可在线阅读,更多相关《课设最终版 汪一 黄纬文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
5.一个LED灯(折扣时间显示)11
5、软件设计12
1.程序块划分:
12
2.程序框图13
3.变量定义表:
22
4.编写详细程序:
23
6、软仿真调试及修改33
7、硬件仿真调试及修改33
8、操作说明/使用说明34
键位说明:
34
操作步骤:
9、小组分工35
1、题目要求:
电子秤计价器设计
1)开机后能够显示及修改当前时间。
2)有两种商品AB可供选择,两种商品均可通过按键修改单价。
3)每种商品称重(0-20KG)后,数码管显示所选商品的种类、重量、当前单价和总价,并计入每种商品的累计总价。
4)可通过按键选择显示开机后的每种商品的销售总金额,也可通过按键分别清零每种商品的总金额,重新开始累计。
5)可以设置优惠时间段和优惠折扣,进入优惠时间段后,黄灯亮;
称重每种商品后显示种类、重量、当前单价、折扣、折前价和折扣后价格。
实现以上五个功能
2、分析功能要求,确定方案
(1)、硬件系统框图设计
1.1
为了程序可以良好的运行和实施,我们需要合理的去分配各个端口及控制功
能的按键。
我们通过PA0-PA4共五个键来进行我们的基本功能控制,ADC电压转
换我们接在PA5,LED灯我们接在PA6。
而PB0-PB8我们用来进行数码管的显示,
最后我们把位置扫描放在PD。
12月26日(周一)
构思设计程序结构,画程序框图
12月27日(周二)
根据题目要求,编写程序
12月28日(周三)
调试程序,并实现要求功能
12月29日(周四)
软仿真测试,硬件测试
12月30日(周五)
参加答辩,上交实习报告
1.2
相应计算:
TC2计时器选择CTC模式比较中断。
已知:
CPU=8M;
time=1s;
f=CLK/64=125kHz;
∴OCR2=125k*2ms-1=250-1=249;
TCNT2=0x00;
OCR2=0xF9.
PA0-PA4:
五个控制按键(详细功能见下图)
PA5:
电压测量计
PA6:
ADC数模转换,端口接滑动变阻器
PB0-PB7:
数码管显示端口接七段码数据显示
PD0-PD7:
数据显示位置端口接八个位置显示
1.PINA0功能
按键次数
模式切换显示
模式
0
时钟显示
1
重量显示
2
单价显示
2
3
折扣时间显示
4
折扣显示
5
折后价显示
6
当前总价显示
7
累计总价显示
7
2.PINA1功能
功能
分调节+1
单价调节+1
折扣时间调节(开始时间+1)
折扣+1
5
7
累计总价A清零
3.PINA2功能
分调节-1
单价调节-1
折扣时间调节(结束时间+1)
折扣-1
累计总价B清零
4.PINA3功能
类型切换
显示
A
B
5.PINA4功能
称重
6.数码管多功能显示
位置
模式一
其他模式
小时(十位)
AB类型(0or1)
小时(个位)
空
分钟(十位)
3
模式(1-7)
分钟(个位)
秒(十位)
模式对应显示量值
秒(个位)
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、软件设计
主程序
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灯函数
显示函数
缓冲区函数
模式选择函数
键盘扫描函数
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
时间到达一秒的标志
//工业控制器原理及应用
(1)课程设计
//题目:
称重售卖机设计
//指导教师:
//设计者:
汪一201410216058,黄纬201410216062
#include<
iom16v.h>
//变量初始化
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;
//延迟
{
while(i--)
{
unsignedcharj;
for(j=0;
j<
665;
j++);
}
}
//主函数
port_init();
timer_init();
adc_init();
SREG=0X80;
while
(1)
time_count();
disp_choice();
vtodisp();
disp();
key_scan();
DENG();
}
//端口初始化
DDRA=0X40;
PORTA=0X5F;
DDRB=0XFF;
PORTB=0X00;
DDRD=0XFF;
PORTD=0X00;
//adc初始化
ADMUX=0b01000101;
ADCSRA=0b10111101;
SFIOR|=0x60;
//TC初始化
TCCR0=0x0B;
TCNT0=0x00;
OCR0=0xF9;
TCCR2=0X0B;
TCNT0=0X00;
OCR2=0XF9;
TIMSK=0X82;
//时间处理
if(time_ok==1)
time_ok=0;
if(++time[2]>
=60)
time[2]=0;
if(++time[1]>
time[1]=0;
if(++time[0]>
=24)time[0]=0;
//指示灯
if(time[0]>
=discount_time[0]&
&
time[0]<
discount_time[1])
PORTA=0X1F;
else
//送缓冲区
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];
if(disp_choose==3)
j=0;
=2;
multi_disp[j++]=discount_time[i]/10;
multi_disp[j++]=discount_time[i]%10;
if(disp_choose==4)
a=discount;
for(i=0;
a=a/10;
}
if(disp_choose==5)
a=discount_price[kind];
if(disp_choose==6)
a=present_price[kind];
if(disp_choose==7)
a=total_price[kind];
//缓冲区
unsignedchari,j=0;
if(disp_choose==0)
dis_buf[6]=0;
dis_buf[7]=0;
dis_buf[j++]=time[i]/10;
dis_buf[j++]=time[i]%10;
{
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];
//显示
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]];
if(++posit>
8)posit=0;
PORTB=Led_disbuf[dis_buf[posit]];
//键盘扫描
unsignedinta=0;
if((PINA&
0X1F)!
=0X1F)
delayms(20);
if((PINA&
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]>
}
}
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;
}
0X04)==0)
if(disp_choose==0)
//在时间模式下,按键三为时加一
time[0]=time[0]+1;
if(time[0]>
if(disp_choose==2)
//在单价模式下,按键三为单价减一
unit_price[kind]=unit_price[kind]-1;
if(unit_price[kind]<
=0)unit_price[kind]=19;
//在折扣时间模式下,按键三为折扣开始时间减一
discount_time[1]=discount_time[1]+1;
if(discount_time[1]>
=24)discount_time[1]=0;
//在折扣模式下,按键三为折扣减一
discount=discount-1;
if(discount<
=1)discount=10;
//在累计总价模式下,按键二为B的累计总价清零
total_price[1]=0;
}
0X08)==0)
//按键四为切换A/B键,按一下若当前为A则切换为B,当前为B则切换为A
kind^=1;
0X10)==0)
//按键五为称重键,按一下则更新一次当前重量值并进行总价计算
weight[kind]=adc_val;
weight[kind]=weight[kind]*5000/1024*4;
if(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;
}
while((PINA&
=0X1F);
//TC0中断服务程序
#pragmainterrupt_handlertimer0_comp:
20
//adc中断服务程序
#pragmainterrupt_handleradc_isr:
15
adc_rel=ADCL;
adc_rel|=(unsignedint)(ADCH<
<
8);
adc_val=(unsignedlong)adc_rel;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课设最终版 汪一 黄纬 最终版