收藏 分销(赏)

毕设论文--于基msp43f149电子秤设计-附电路图.doc

上传人:胜**** 文档编号:2797197 上传时间:2024-06-06 格式:DOC 页数:15 大小:92KB 下载积分:10 金币
下载 相关 举报
毕设论文--于基msp43f149电子秤设计-附电路图.doc_第1页
第1页 / 共15页
毕设论文--于基msp43f149电子秤设计-附电路图.doc_第2页
第2页 / 共15页


点击查看更多>>
资源描述
附录1 电路原理图 附录2 程序 /*********************************************************** 程序功能:在12864液晶上显示重量 ----------------------------------------------------------- ---------------------------------------------------- 测试说明:观察液晶显示 ***********************************************************/ #include <msp430x14x.h> typedef unsigned char uchar; typedef unsigned int uint; extern const unsigned char shuzi_table[]; float e; /***************全局变量***************/ uchar key_Pressed; //按键是否被按下:1--是,0--否 uchar key_val; //存放键值 uchar key_Flag; //按键是否已放开:1--是,0--否 /*设置键盘逻辑键值与程序计算键值的映射*/ uchar key_Map[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; #define LCD_DataIn P4DIR=0x00 //数据口方向设置为输入 #define LCD_DataOut P4DIR=0xff //数据口方向设置为输出 #define LCD2MCU_Data P4IN #define MCU2LCD_Data P4OUT #define LCD_CMDOut P3DIR|=0x07 //P3口的低三位设置为输出 #define LCD_RS_H P3OUT|=BIT0 //P3.0 #define LCD_RS_L P3OUT&=~BIT0 //P3.0 #define LCD_RW_H P3OUT|=BIT1 //P3.1 #define LCD_RW_L P3OUT&=~BIT1 //P3.1 #define LCD_EN_H P3OUT|=BIT2 //P3.2 #define LCD_EN_L P3OUT&=~BIT2 //P3.2 /******************************************* 写入内容待显示内容 ********************************************/ const uchar hang1[] = {"小小苏电子称系统"}; const uchar hang2[] = {"净重: g "}; const uchar hang3[] = {"总价: 元"}; const uchar hang4[] = {"单价 /Kg"}; const uchar hang5[] = {"萝卜"};const uchar hang6[] = {"豆角"}; const uchar hang7[] = {"土豆"};const uchar hang8[] = {"白菜"}; const uchar hang9[] = {"苹果"};const uchar hang10[] = {"香蕉"}; const uchar hang11[] = {"橘子"};const uchar hang12[] = {"桃子"}; const uchar hang13[] = {"猪肉"};const uchar hang14[] = {"羊肉"}; const uchar hang15[] = {"牛肉"};const uchar hang16[] = {"鸡肉"}; const uchar hang17[] = {"山药"};const uchar hang18[] = {"生姜"}; const uchar hang19[] = {"木耳"}; /******************************************* 函数名称:Init_Keypad 功 能:初始化扫描键盘的IO端口 参 数:无 返回值 :无 ********************************************/ void Init_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端口,获得键值 参 数:无 返回值 :无 ********************************************/ void Check_Key(void) { uchar row ,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,完成消抖功能 参 数:无 返回值 :无 ********************************************/ void delay() { uint tmp; for(tmp = 12000;tmp > 0;tmp--); } /******************************************* 函数名称:Key_Event 功 能:检测按键,并获取键值 参 数:无 返回值 :无 ********************************************/ void Key_Event(void) { uchar tmp; P1OUT &= 0x00; // 设置P1高四位全为0,等待按键输入 tmp = P1IN; // 获取 p1IN if ((key_Pressed == 0x00)&&((tmp & 0x0f) < 0x0f)) //如果有键按下 { key_Pressed = 1; // 如果有按键按下,设置key_Pressed标识 delay(); //消除抖动 Check_Key(); // 调用check_Key(),获取键值 } else if((key_Pressed == 1)&&((tmp & 0x0f) == 0x0f)) //如果按键已经释放 { key_Pressed = 0; // 清除key_Pressed标识 key_Flag = 1; // 设置key_Flag标识 } else { _NOP(); } } /******************************************* 函数名称:Delay_1ms 功 能:延时约1ms的时间 参 数:无 返回值 :无 ********************************************/ void Delay_1ms(void) { uchar i; for(i = 150;i > 0;i--) _NOP(); } /******************************************* 函数名称:Delay_Nms 功 能:延时N个1ms的时间 参 数:n--延时长度 返回值 :无 ********************************************/ void Delay_Nms(uint n) { uint i; for(i = n;i > 0;i--) Delay_1ms(); } /******************************************* 函数名称:Write_Cmd 功 能:向液晶中写控制命令 参 数:cmd--控制命令 返回值 :无 ********************************************/ void Write_Cmd(uchar cmd) { uchar lcdtemp = 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--显示数据 返回值 :无 ********************************************/ void Write_Data(uchar dat) { uchar lcdtemp = 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 功 能:初始化液晶模块 参 数:无 返回值 :无 ********************************************/ void Ini_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--显示字符个数 返回值 :无 ********************************************/ void Disp_HZ(uchar addr,const uchar * pt,uchar num) { uchar i; Write_Cmd(addr); for(i = 0;i < num;i++) Write_Data(*(pt++)); } /******************************************* 函数名称:Disp_WEI 功 能:控制液晶显示汉字 参 数:addr--显示位置的首地址 pt--指向显示数据的指针 num--显示字符个数 返回值 :无 ********************************************/ void Disp_WEI(uchar addr,int c,char num) { uchar i; Write_Cmd(addr); for(i = 0;i < num;i++) Write_Data(c); } /***************************主函数*************************/ void main( 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) {case 0: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; case 1: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; case 2: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; case 3: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; case 4: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; case 5: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; case 6: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; case 7: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; case 8: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; case 9: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; case 10: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; case 11: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; case 12: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; case 13: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; case 14: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; case 15: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 ; } } } } #pragma vector=ADC_VECTOR __interrupt void ADC12_ISR(void) { int a,b,c,d,temp; long int g,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%100000%10000%1000%100/10+0x30); _BIC_SR_IRQ(CPUOFF); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服