最新版电子秤的设计和实现毕业论文设计Word文档下载推荐.docx
- 文档编号:14978460
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:22
- 大小:533.65KB
最新版电子秤的设计和实现毕业论文设计Word文档下载推荐.docx
《最新版电子秤的设计和实现毕业论文设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《最新版电子秤的设计和实现毕业论文设计Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
(1)主程序设计
图2主程序设计
(2)子程序A/D0832转化
图3A/D0832转化
(3)显示子程序设计
图4显示子程设计
(4)按键子程设计
在程序中可以先判断按键编码,然后依照编码将键盘代表数值送到相应存储单元,再进行功能选取或数据解决。
键盘扫描子程序流程图如下:
图5按键子程序设计
3.程序清单
#include<
regx51.h>
intrins.h>
#include<
absacc.h>
math.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineBUSY0x80//常量定义
#defineDATAPORTP0
sbitbADcs=P1^3;
//片选位
sbitbADcl=P1^6;
//时钟位
sbitbADda=P1^7;
//数据位
sbitLCM_RS=P1^0;
sbitLCM_RW=P1^1;
sbitLCM_EN=P1^2;
uintx1,y1,z1=0,w1,temp1;
ucharad_data,k,n,m,e,num,s;
//采样值存储
ucharz;
uchardata1;
charpress_data;
//标度变换存储单元
unsignedcharad_alarm;
unsignedcharpress_ge=0;
//显示值百位
unsignedcharpress_shifen=0;
//显示值十位
unsignedcharpress_baifen=0;
//显示值个位
unsignedcharpress_qianfen=0;
//显示值十分位
ucharcodestr0[]={"
Weight:
.Kg"
};
ucharcodestr2[]={"
Price:
"
ucharcodestr3[]={"
Total:
ucharcodetable2[]={0x37,0x38,0x39,0xfd,0x34,0x35,0x36,0x78,0x31,0x32,0x33,0x2d,0x3d,0x30,0x2e,0x2b};
//键盘码
voidintu();
voidjianpan();
voiddelay(uint);
voidlcd_wait(void);
voiddelay_LCM(uint);
//LCD延时子程序
voidinitLCM(void);
//LCD初始化子程序
voidlcd_wait(void);
//LCD检测忙子程序
voidWriteCommandLCM(ucharWCLCM,ucharBusyC);
//写指令到ICM子函数
voidWriteDataLCM(ucharWDLCM);
//写数据到LCM子函数
voidDisplayOneChar(ucharX,ucharY,ucharDData);
//显示指定坐标一种字符子函数
voidDisplayListChar(ucharX,ucharY,ucharcode*DData);
//显示指定坐标一串字符子函数
voidweishu(uintm);
voidweishu1(uintm);
voiddisplay(void);
voidad0832();
voidalarm(void);
voiddata_pro(void);
voidad0832(void)
{uchari;
bADcs=0;
//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,开始工作CS为低电平
bADcl=0;
//第一种时钟下降沿前da为1,第二个与第三时钟下降沿前数据为通道选取
bADda=1;
//选置起始位
bADcl=1;
//1down
//通道选取第1位
bADcl=0;
//2down
bADda=0;
//通道选取第2位,通道选取为1,0选通道0
//3down
bADda=1;
//4down
for(i=8;
i>
0;
i--)
{
ad_data<
<
=1;
//从第7位开始,要左移data1=data1<
1
bADcl=0;
bADcl=1;
if(bADda==1)ad_data|=0x01;
//如果输出1,data1最后一位补1
}
bADcs=1;
//转换完后CS置1
}
/**********mainfuncation************/
voidmain(void)
{
delay(50);
//系统延时500ms启动
ad_data=0;
//采样值存储单元初始化为0
initLCM();
intu();
WriteCommandLCM(0x01,1);
//清显示屏
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str2);
while
(1)
{
ad0832();
data_pro();
display();
jianpan();
if(k==1)
if(s<
=3)
{
DisplayOneChar((s+7),1,table2[num-1]);
if(s==1)
data1=n;
else
data1=data1*10+n;
}
if(k=='
='
{
z1=data1*temp1;
WriteCommandLCM(0x01,1);
DisplayListChar(0,1,str3);
s=0;
weishu1(z1);
k=0;
'
WriteCommandLCM(0x80+0x40,1);
z1=0;
s=0;
//防止清零时指针后移动
/*********延时K*1ms,12.000mhz**********/
voiddelay(uintk)
{
uinti,j;
for(i=0;
i<
k;
i++)
for(j=0;
j<
10;
j++);
}
/**********写指令到ICM子函数************/
voidWriteCommandLCM(ucharWCLCM,ucharBusyC)
if(BusyC)
lcd_wait();
DATAPORT=WCLCM;
LCM_RS=0;
//选中指令寄存器
LCM_RW=0;
//写模式
LCM_EN=1;
_nop_();
_nop_();
LCM_EN=0;
/**********写数据到LCM子函数************/
voidWriteDataLCM(ucharWDLCM)
lcd_wait();
//检测忙信号
DATAPORT=WDLCM;
LCM_RS=1;
//选中数据寄存器
//写模式
LCM_EN=1;
/***********lcm内部等待函数*************/
voidlcd_wait(void)
DATAPORT=0xff;
//读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色
LCM_RW=1;
while(DATAPORT&
BUSY)
{LCM_EN=0;
}
LCM_EN=0;
/**********LCM初始化子函数***********/
voidinitLCM()
LCM_EN=0;
DATAPORT=0;
delay(10);
WriteCommandLCM(0x38,0);
//三次显示模式设立,不检测忙信号
delay(5);
WriteCommandLCM(0x38,0);
delay
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新版 电子秤 设计 实现 毕业论文
![提示](https://static.bdocx.com/images/bang_tan.gif)