当前位置:首页 > 论文 - 图文
7、使用说明
在使用仿真的过程中,首先打开仿真电路图,并加载好“HEX”文件到单片机中。后将压力传感电压调制0.00,点击按钮,开始仿真。(为了能够看到清晰的演示过程,请将电路的背景设为无。)整个电子秤设置了“0~15”个按键,其中的“0”键表示取消,其他键代表15种可供选择商品价格。(另本设计的仿真文件需要安装protues7.4以上版本才能打开。)
8、设计总结
通过本次电子技能课程数字电子秤的设计,让我更加熟悉了单片机的整个设计流程。在设计过程中,我也意识到好的编程书写习惯对软件设计的重要性。刚刚开始由于自己变量大部分采用的是局部变量,导致程序仿真出错,给自己的修改创造不小的麻烦。经过一天的努力,统一采用全局变量终于实现最终的仿真结果和设计的全部任务和要求。当然本数字电子秤还有很多可以改进的地方,只能在以后的学习过程中做更进一步的改进。
参考文献
[1] 于永.51单片机C语言常用模块于综合系统设计实例精讲[M].北京:电子工业出版
社,2008:88-94.
[2] 李建忠.单片机原理及应用[M].西安:西安电子科技大学出版,2002:63-78. [3] 张俊谟.单片机中级教程[M].北京:北京航空航天大学出版,2000:36-45.
附录A
#include
#define uchar unsigned char #define uint unsigned int sbit ADCS =P3^5; sbit ADDI =P3^7; sbit ADDO =P3^7; sbit ADCLK =P3^6; uint x1,y1,z1=0,w1;
uchar ad_data,k,n,m,e,num,s; //采样值存储 uint temp1;
sbit beep =P3^0;
char press_data; //标度变换存储单元 float press;
unsigned char ad_alarm,temp; //报警值存储单元 unsigned char abc[5]={48,46,48,48,48};
-11-
unsigned char price_all[6]={48,48,46,48,48,48};
float price_unit[10]={5.5,2.8,3.6,4.5,5.8,6.8,7.9,8.0,9.5,0}; //商品初始单价
uchar price_danjia[5]={48,46,48,48,48}; float price;
uint price_temp1,price_temp2; //商品总价 uchar Adc0832(unsigned char channel); void alarm(void); void data_pro(void); void delay(uint k); void keyscan(); void disp_init(); void price_jisuan(); /************ 主函数
************/ void main(void) {
delay(500); //系统延时500ms启动
//ad_data=0; //采样值存储单元初始化为0 lcd_init(); //显示初始化
disp_init(); //开始进入欢迎界面 delay(1000); //延时进入称量画面 clear_lcd(0,4,40); clear_lcd(16,0,80); clear_lcd(28,0,40); clear_lcd(44,0,80); clear_lcd(56,0,40); clear_lcd(72,0,80); clear_lcd(84,0,40); clear_lcd(100,0,80); clear_lcd(112,0,40);
write_lcd(0,8,\实用电子秤\ while(1) {
ad_data =Adc0832(0); //采样值存储单元初始化为0 alarm();
data_pro(); //读取重量 keyscan(); //查询商品种类
write_lcd(40,0,\ write_lcd(56,0,\单 价:\ write_lcd(56,11,price_danjia); write_lcd(56,20,\元/千克\ write_lcd(72,0,\总重量:\
-12-
write_lcd(72,11,abc); write_lcd(72,20,\千克\ write_lcd(88,0,\总 价:\
price_jisuan(); //计算出价格 write_lcd(88,10,price_all); write_lcd(88,20,\元\
write_lcd(112,0,\设计学生: 092034204 何广英\ } }
/************ 读ADC0832函数 ************/ //采集并返回
uchar Adc0832(unsigned char channel) //AD转换,返回结果 {
uchar i=0; uchar j; uint dat=0; uchar ndat=0;
if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_();
ADCS=0;//拉低CS端 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_();
-13-
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0;
for(i=0;i<8;i++) {
dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat<<=1;
if(i==7)dat|=ADDO; }
for(i=0;i<8;i++) {
j=0;
j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j<<7;
ndat=ndat|j; if(i<7)ndat>>=1; }
ADCS=1;//拉搞CS端 ADCLK=0;//拉低CLK端
ADDO=1;//拉高数据端,回到初始状态 dat<<=8; dat|=ndat;
return(dat); //return ad k }
void data_pro(void) {
unsigned int;
if(0 -14-
共分享92篇相关文档