欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    基于MSP430F149电子秤设计论文附电路图1.doc

    • 资源ID:3938837       资源大小:73.50KB        全文页数:15页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于MSP430F149电子秤设计论文附电路图1.doc

    基于MSP430F149电子秤设计论文附录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.0P1.3设置为输入状态, P1.4P1.7设置为输出状态 P1OUT |= 0xf0; / P1.4P1.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.4P1.7输出全0 P1OUT -= tmp1; /P1.4p1.7输出四位中有一个为0 tmp1 >>=1; if (P1IN & 0x0f) < 0x0f) /是否P1IN的P1.0P1.3中有一位为0 tmp2 = 0x01; / tmp2用于检测出那一位为0 for(col = 0;col < 4;col+) / 列检测 if(P1IN & tmp2) = 0x00) / 是否是该列,等于0为是 key_val = key_Maprow * 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);

    注意事项

    本文(基于MSP430F149电子秤设计论文附电路图1.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开