于基msp430f149电子秤设计 附电路图本科毕业设计.docx

上传人:b****5 文档编号:7523994 上传时间:2023-01-24 格式:DOCX 页数:14 大小:43.97KB
下载 相关 举报
于基msp430f149电子秤设计 附电路图本科毕业设计.docx_第1页
第1页 / 共14页
于基msp430f149电子秤设计 附电路图本科毕业设计.docx_第2页
第2页 / 共14页
于基msp430f149电子秤设计 附电路图本科毕业设计.docx_第3页
第3页 / 共14页
于基msp430f149电子秤设计 附电路图本科毕业设计.docx_第4页
第4页 / 共14页
于基msp430f149电子秤设计 附电路图本科毕业设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

于基msp430f149电子秤设计 附电路图本科毕业设计.docx

《于基msp430f149电子秤设计 附电路图本科毕业设计.docx》由会员分享,可在线阅读,更多相关《于基msp430f149电子秤设计 附电路图本科毕业设计.docx(14页珍藏版)》请在冰豆网上搜索。

于基msp430f149电子秤设计 附电路图本科毕业设计.docx

于基msp430f149电子秤设计附电路图本科毕业设计

 

附录1电路原理图

 

附录2程序

/***********************************************************

程序功能:

在12864液晶上显示重量

-----------------------------------------------------------

----------------------------------------------------

测试说明:

观察液晶显示

***********************************************************/

#include

typedefunsignedcharuchar;

typedefunsignedintuint;

externconstunsignedcharshuzi_table[];

floate;

/***************全局变量***************/

ucharkey_Pressed;//按键是否被按下:

1--是,0--否

ucharkey_val;//存放键值

ucharkey_Flag;//按键是否已放开:

1--是,0--否

/*设置键盘逻辑键值与程序计算键值的映射*/

ucharkey_Map[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

#defineLCD_DataInP4DIR=0x00//数据口方向设置为输入

#defineLCD_DataOutP4DIR=0xff//数据口方向设置为输出

#defineLCD2MCU_DataP4IN

#defineMCU2LCD_DataP4OUT

#defineLCD_CMDOutP3DIR|=0x07//P3口的低三位设置为输出

#defineLCD_RS_HP3OUT|=BIT0//P3.0

#defineLCD_RS_LP3OUT&=~BIT0//P3.0

#defineLCD_RW_HP3OUT|=BIT1//P3.1

#defineLCD_RW_LP3OUT&=~BIT1//P3.1

#defineLCD_EN_HP3OUT|=BIT2//P3.2

#defineLCD_EN_LP3OUT&=~BIT2//P3.2

/*******************************************

写入内容待显示内容

********************************************/

constucharhang1[]={"小小苏电子称系统"};

constucharhang2[]={"净重:

g"};

constucharhang3[]={"总价:

元"};

constucharhang4[]={"单价/Kg"};

constucharhang5[]={"萝卜"};constucharhang6[]={"豆角"};

constucharhang7[]={"土豆"};constucharhang8[]={"白菜"};

constucharhang9[]={"苹果"};constucharhang10[]={"香蕉"};

constucharhang11[]={"橘子"};constucharhang12[]={"桃子"};

constucharhang13[]={"猪肉"};constucharhang14[]={"羊肉"};

constucharhang15[]={"牛肉"};constucharhang16[]={"鸡肉"};

constucharhang17[]={"山药"};constucharhang18[]={"生姜"};

constucharhang19[]={"木耳"};

/*******************************************

函数名称:

Init_Keypad

功能:

初始化扫描键盘的IO端口

参数:

返回值:

********************************************/

voidInit_Keypad(void)

{

P1DIR=0xf0;//P1.0~P1.3设置为输入状态,P1.4~P1.7设置为输出状态

P1OUT|=0xf0;//P1.4~P1.7输出低电平

key_Flag=0;

key_Pressed=0;

key_val=5;

}

/*******************************************

函数名称:

Check_Key

功能:

扫描键盘的IO端口,获得键值

参数:

返回值:

********************************************/

voidCheck_Key(void)

{

ucharrow,col,tmp1,tmp2;

tmp1=0x80;

for(row=0;row<4;row++)//行扫描

{

P1OUT=0xf0;//P1.4~P1.7输出全0

P1OUT-=tmp1;//P1.4~p1.7输出四位中有一个为0

tmp1>>=1;

if((P1IN&0x0f)<0x0f)//是否P1IN的P1.0~P1.3中有一位为0

{tmp2=0x01;//tmp2用于检测出那一位为0

for(col=0;col<4;col++)//列检测

{if((P1IN&tmp2)==0x00)//是否是该列,等于0为是

{key_val=key_Map[row*4+col];//获取键值

return;//退出循环

}

tmp2<<=1;//tmp2右移1位

}

}

}

//return(key_val);

}

/*******************************************

函数名称:

delay

功能:

延时约15ms,完成消抖功能

参数:

返回值:

********************************************/

voiddelay()

{

uinttmp;

for(tmp=12000;tmp>0;tmp--);

}

/*******************************************

函数名称:

Key_Event

功能:

检测按键,并获取键值

参数:

返回值:

********************************************/

voidKey_Event(void)

{

uchartmp;

P1OUT&=0x00;//设置P1高四位全为0,等待按键输入

tmp=P1IN;//获取p1IN

if((key_Pressed==0x00)&&((tmp&0x0f)<0x0f))//如果有键按下

{

key_Pressed=1;//如果有按键按下,设置key_Pressed标识

delay();//消除抖动

Check_Key();//调用check_Key(),获取键值

}

elseif((key_Pressed==1)&&((tmp&0x0f)==0x0f))//如果按键已经释放

{

key_Pressed=0;//清除key_Pressed标识

key_Flag=1;//设置key_Flag标识

}

else

{

_NOP();

}

}

/*******************************************

函数名称:

Delay_1ms

功能:

延时约1ms的时间

参数:

返回值:

********************************************/

voidDelay_1ms(void)

{

uchari;

for(i=150;i>0;i--)_NOP();

}

/*******************************************

函数名称:

Delay_Nms

功能:

延时N个1ms的时间

参数:

n--延时长度

返回值:

********************************************/

voidDelay_Nms(uintn)

{

uinti;

for(i=n;i>0;i--)Delay_1ms();

}

/*******************************************

函数名称:

Write_Cmd

功能:

向液晶中写控制命令

参数:

cmd--控制命令

返回值:

********************************************/

voidWrite_Cmd(ucharcmd)

{

ucharlcdtemp=0;

LCD_RS_L;

LCD_RW_H;

LCD_DataIn;

do//判忙

{LCD_EN_H;

_NOP();

lcdtemp=LCD2MCU_Data;

LCD_EN_L;

}

while(lcdtemp&0x80);

LCD_DataOut;

LCD_RW_L;

MCU2LCD_Data=cmd;

LCD_EN_H;

_NOP();

LCD_EN_L;

}

/*******************************************

函数名称:

Write_Data

功能:

向液晶中写显示数据

参数:

dat--显示数据

返回值:

********************************************/

voidWrite_Data(uchardat)

{

ucharlcdtemp=0;

LCD_RS_L;

LCD_RW_H;

LCD_DataIn;

do//判忙

{

LCD_EN_H;

_NOP();

lcdtemp=LCD2MCU_Data;

LCD_EN_L;

}

while(lcdtemp&0x80);

LCD_DataOut;

LCD_RS_H;

LCD_RW_L;

MCU2LCD_Data=dat;

LCD_EN_H;

_NOP();

LCD_EN_L;

}

/*******************************************

函数名称:

Ini_Lcd

功能:

初始化液晶模块

参数:

返回值:

********************************************/

voidIni_Lcd(void)

{

LCD_CMDOut;//液晶控制端口设置为输出

Delay_Nms(500);

Write_Cmd(0x30);//基本指令集

Delay_1ms();

Write_Cmd(0x02);//地址归位

Delay_1ms();

Write_Cmd(0x0c);//整体显示打开,游标关闭

Delay_1ms();

Write_Cmd(0x01);//清除显示

Delay_1ms();

Write_Cmd(0x06);//游标右移

Delay_1ms();

Write_Cmd(0x80);//设定显示的起始地址

}

/*******************************************

函数名称:

Disp_HZ

功能:

控制液晶显示汉字

参数:

addr--显示位置的首地址

pt--指向显示数据的指针

num--显示字符个数

返回值:

********************************************/

voidDisp_HZ(ucharaddr,constuchar*pt,ucharnum)

{

uchari;

Write_Cmd(addr);

for(i=0;i

Write_Data(*(pt++));

}

/*******************************************

函数名称:

Disp_WEI

功能:

控制液晶显示汉字

参数:

addr--显示位置的首地址

pt--指向显示数据的指针

num--显示字符个数

返回值:

********************************************/

voidDisp_WEI(ucharaddr,intc,charnum)

{

uchari;

Write_Cmd(addr);

for(i=0;i

Write_Data(c);

}

/***************************主函数*************************/

voidmain(void)

{/*下面六行程序关闭所有的IO口*/

P1DIR=0XFF;P1OUT=0XFF;

P2DIR=0XFF;P2OUT=0XFF;

P3DIR=0XFF;P3OUT=0XFF;

P4DIR=0XFF;P4OUT=0XFF;

P5DIR=0XFF;P5OUT=0XFF;

P6DIR=0XFF;P6OUT=0XFF;

WDTCTL=WDTPW+WDTHOLD;//关狗

P6DIR|=BIT2;P6OUT|=BIT2;//关闭电平转换

Ini_Lcd();//初始化液晶

ADC12CTL0=SHT0_2+ADC12ON;//设置采样时间+ADC12内核开

ADC12CTL1=SHP;//使用采样定时器

ADC12IE=0X01;//开启中断

ADC12CTL0|=ENC;//转换使能

P6SEL|=0X01;

Disp_HZ(0x80,hang1,16);

Disp_HZ(0x90,hang2,16);

Disp_HZ(0x88,hang3,16);

Disp_HZ(0x98,hang4,16);

Init_Keypad();

_EINT();

while

(1)

{

ADC12CTL0|=ADC12SC;//启动转换

//while((ADC12IFG&0x01)==0);

_NOP();

Key_Event();

if(key_Flag==1)

{key_Flag=0;

switch(key_val)

{case0:

P2OUT=0XFE;Disp_HZ(0x9a,hang5,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(2+0x30);

Write_Data(0x2e);Write_Data(3+0x30);

e=2.3;break;

case1:

P2OUT=0XFD;Disp_HZ(0x9a,hang6,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(6+0x30);

Write_Data(0x2e);Write_Data(9+0x30);

e=6.9;break;

case2:

P2OUT=0XFB;Disp_HZ(0x9a,hang7,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(2+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=2.0;break;

case3:

P2OUT=0XF7;Disp_HZ(0x9a,hang8,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(1+0x30);

Write_Data(0x2e);Write_Data(5+0x30);

e=1.5;break;

case4:

P2OUT=0XEF;Disp_HZ(0x9a,hang9,4);

Write_Cmd(0x9c);Write_Data(1+0x30);Write_Data(4+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=14.0;break;

case5:

P2OUT=0XDF;Disp_HZ(0x9a,hang10,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(9+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=9.0;break;

case6:

P2OUT=0XBF;Disp_HZ(0x9a,hang11,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(6+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=6.0;break;

case7:

P2OUT=0X7F;Disp_HZ(0x9a,hang12,4);

Write_Cmd(0x9c);Write_Data(2+0x30);Write_Data(0+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=20.0;break;

case8:

P2OUT=~0XFE;Disp_HZ(0x9a,hang13,4);

Write_Cmd(0x9c);Write_Data(3+0x30);Write_Data(5+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=30.0;break;

case9:

P2OUT=~0XFD;Disp_HZ(0x9a,hang14,4);

Write_Cmd(0x9c);Write_Data(8+0x30);Write_Data(0+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=80.0;break;

case10:

P2OUT=~0XFB;Disp_HZ(0x9a,hang15,4);

Write_Cmd(0x9c);Write_Data(7+0x30);Write_Data(0+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=70.0;break;

case11:

P2OUT=~0XF7;Disp_HZ(0x9a,hang16,4);

Write_Cmd(0x9c);Write_Data(1+0x30);Write_Data(5+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=15.0;break;

case12:

P2OUT=~0XEF;Disp_HZ(0x9a,hang17,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(3+0x30);

Write_Data(0x2e);Write_Data(5+0x30);

e=3.5;break;

case13:

P2OUT=~0XDF;Disp_HZ(0x9a,hang18,4);

Write_Cmd(0x9c);Write_Data(0+0x30);Write_Data(4+0x30);

Write_Data(0x2e);Write_Data(5+0x30);

e=4.5;break;

case14:

P2OUT=~0XBF;Disp_HZ(0x9a,hang19,4);

Write_Cmd(0x9c);Write_Data(4+0x30);Write_Data(0+0x30);

Write_Data(0x2e);Write_Data(5+0x30);

e=40.0;break;

case15:

P2OUT=~0X7F;//Disp_HZ(0x9a,hang21,4);

Write_Cmd(0x9a);Write_Data(0x20);Write_Data(0x20);

Write_Data(0x20);Write_Data(0x20);

Write_Data(0+0x30);Write_Data(0+0x30);

Write_Data(0x2e);Write_Data(0+0x30);

e=0;break;

default:

break;

}

}

}

}

#pragmavector=ADC_VECTOR

__interruptvoidADC12_ISR(void)

{inta,b,c,d,temp;

longintg,y;

temp=ADC12MEM0;

temp=temp/100;

g=121*temp;

y=g*e;

if(g>400)

{

a=g/1000;

b=g%1000/100;

c=g%1000%100/10;

d=g%1000%100%10;}

else

{

a=b=c=d=0;y=0;

}

Write_Cmd(0x93);Write_Data(a+0x30);Write_Data(b+0x30);

Write_Data(c+0x30);Write_Data(d+0x30);

Delay_Nms(200);

Write_Cmd(0x8b);Write_Data(y/100000+0x30);

Write_Data(y%100000/10000+0x30);

Write_Data(y%100000%10000/1000+0x30);Write_Data(0x2e);

Write_Data(y%100000%10000%1000/100+0x30);

Write_Data(y%1000

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

当前位置:首页 > 表格模板 > 书信模板

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

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