msp430 三级菜单 菜单算法

合集下载

msp430各功能模块的介绍

msp430各功能模块的介绍

各个时钟信号源介绍如下:1、LFXT1CLK:低频/高频时钟源。

可以外接32768Hz的时钟芯片或频率为450KHz~8MHz的标准警惕或共振器。

2、XT2CLK:高频时钟源。

需要外接两个震荡电容器。

可以外接32768Hz的时钟芯片或频率为450KHz~8MHz的标准警惕或共振器和外部时钟输入。

较常用的晶体是8MHz的。

3、DCOCLK:内部数字可控制的RC振荡器。

MSP430单片机时钟模块提供3个时钟信号以供给片内各部分电路使用,这3个时钟信号分别是:(1)ACLK:辅助时钟信号。

ACLK是从LFXT1CLK信号由1/2/4/8分频器分频后得到的。

由BCSCTL1寄存器设置DIV A相应位来决定分频因子。

ACLK可提供给CPU外围功能模块做时钟信号使用。

(2)MCLK:主时钟信号。

MCLK是由3个时钟源所提供的。

它们分别是:LFXT1CLK、XT2CLK、和DCO时钟源信号。

MCLK主要用于MCU和相关模块做时钟。

同样可设置相关寄存器来决定分频因子及相关设置。

(3)SMCLK:子系统时钟。

SMCLK由2个时钟源信号提供,他们分别是XT2CLK 和DCO。

如果是F11或F11X1系列单片机,则由LFXT1CLK代替XT2CLK。

同样可设置相关寄存器来决定分频因子及相关的设置。

低频振荡器LFXT1:LFXT1支持超低功耗,它在低频模式下使用一个32768Hz的晶体。

不需要任何电容因为在低频模式下内部集成了电容。

低频振荡器也支持高频模式和高速晶体,但连接时每端必须加电容。

电容的大小根据所接晶体频率的高低来选择。

低频振荡器在低频和高频模式下都可以选择从XIN引脚接入一个外部输入时钟信号,但所接频率必须根据所设定的工作模式来选择,并且OSCOFF位必须复位。

高频振荡器LFXT2:LFXT2作为MSP430的第二晶体振荡器。

与低频相比,其功耗更大。

高频晶体真大气外接在XIN2和XOUT2两个引脚,并且必须外接电容。

MSP430F5529实验指导书V1.0

MSP430F5529实验指导书V1.0

MSP430F5529 实验指导书(V1.0)2014年10月27日东北林业大学机电工程学院“3+1”实验室实验一基础GPIO实验实验二键盘与液晶显示实验实验三时钟系统配置实验实验四看门狗与定时器实验实验五 AD/DA实验实验六比较器实验实验七 Flash实验实验八串行通信实验实验一基础GPIO实验【实验目的】1、熟悉CCS的基本使用方法;2、掌握MSP430系列单片机程序开发的基本步骤;3、掌握MSP430 IO口的基本功能。

【实验仪器】1、SEED-EXP430F5529v1.0开发板一套;2、PC机操作系统Windows XP或Windows 7,CCSv5.1集成开发环境。

【实验原理】CCS(Code Composer Studio)是 TI 公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。

CCSv5.1 为 CCS 软件的最新版本,功能更强大、性能更稳定、可用性更高,是 MSP430 软件开发的理想工具。

SEED-EXP430F5529v1.0开发板上的有8个可操作的LED灯,与MCU的IO口对应关系如图1-1所示:图1-1 LED与MCU的IO对应关系电路我们可以通过控制单片机IO口的输出电平状态来控制各个LED灯的亮灭。

开发板上还有2个可操作的按键S1,S2。

如图1-2所示。

图1-2 按键电路我们可以通过读取与按键相连的IO口的输入电平状态来执行相应的操作。

此外,S1,S2还可以作为外部中断源,触发中断。

【实验内容】1、用调用头文件的方法,使能MSP430F5529开发板上的8个LED灯依次按顺序循环点亮;2、用按键S1控制开发板上LED1的亮灭状态(查询法);3、用按键S2控制开发板上跑马灯的循环速度(中断方式)。

【实验步骤】内容1:使能开发板上的8个LED灯依次按顺序循环点亮1、打开CCSv5并确定工作区间,然后选择File-->New-->CCS Project 弹出图1-3对话框。

msp430单片机12864二级菜单

msp430单片机12864二级菜单

#include <msp430x14x.h>#define uchar unsigned char#define uint unsigned int#define LCD_data P5DIR=0XFF //数据口输出#define LCD_CMDOUT P3DIR|=0xe0 //P3口的高三位设置为输出#define LCD_RS_LOW P3OUT &= ~BIT7 //RS=0#define LCD_RS_HIGH P3OUT |=BIT7 //RS=1#define LCD_RW_LOW P3OUT &= ~BIT6 //RW=0#define LCD_RW_HIGH P3OUT |=BIT6 //RW=1#define LCD_EN_LOW P3OUT &= ~BIT5 //EN=0#define LCD_EN_HIGH P3OUT |=BIT5 //EN=1uchar k=0,flag=0,flag1=0;uchar dis1_[] = {"系统初始化. "};uchar dis2_[] = {"系统初始化.. "};uchar dis3_[] = {"系统初始化... "};uchar dis4_[] = {" 按选择键开始! "};uchar dis1[] = {"手1:手机设定"}; //一级菜单1uchar dis2[] = {"机2:管理器"}; //一级菜单2uchar dis3[] = {"菜3:通话"}; //一级菜单3uchar dis4[] = {"单4:信息功能"}; //一级菜单5uchar dis5[] = {"手5:文件管理"}; //一级菜单7uchar dis6[] = {"机6:通讯录"}; //一级菜单8uchar dis7[] = {"菜"}; //一级菜单8uchar dis8[] = {"单"}; //一级菜单8uchar dis1_1[] = {"手1:时间和日期"}; //一级菜单1下的子菜单1 uchar dis2_1[] = {"机2:语言"}; //一级菜单1下的子菜单2 uchar dis3_1[] = {"设3:语音控制"}; //一级菜单1下的子菜单3 uchar dis4_1[] = {"定4:关闭无线电"}; //一级菜单1下的子菜单4uchar dis1_2[] = {"管1:闹铃"}; //一级菜单2下的子菜单1 uchar dis2_2[] = {"理2:视频电话"}; //一级菜单2下的子菜单2 uchar dis3_2[] = {"器3:日历"}; //一级菜单2下的子菜单3 uchar dis4_2[] = {" 4:任务"}; //一级菜单2下的子菜单4uchar dis1_3[] = {"通1:全部"}; //一级菜单3下的子菜单1 uchar dis2_3[] = {"话2:已接来电"}; //一级菜单3下的子菜单2 uchar dis3_3[] = {" 3:未接来电"}; //一级菜单3下的子菜单3 uchar dis4_3[] = {" 4:已拨电话"}; //一级菜单3下的子菜单4uchar dis1_4[] = {"信1:编写新信息"}; //一级菜单4下的子菜单1uchar dis2_4[] = {"息2:收件箱"}; //一级菜单4下的子菜单2uchar dis3_4[] = {"功3:电子邮件"}; //一级菜单4下的子菜单3uchar dis4_4[] = {"能4:草稿箱"}; //一级菜单4下的子菜单4uchar dis1_5[] = {"文1:相册"}; //一级菜单5下的子菜单1uchar dis2_5[] = {"件2:音乐"}; //一级菜单5下的子菜单2uchar dis3_5[] = {"管3:视频"}; //一级菜单5下的子菜单3uchar dis4_5[] = {"理4:图片"}; //一级菜单5下的子菜单4uchar dis1_6[] = {"通1:快速拨号"}; //一级菜单6下的子菜单1uchar dis2_6[] = {"讯2: 我的名片"}; //一级菜单6下的子菜单2uchar dis3_6[] = {"录3: 组群"}; //一级菜单6下的子菜单3uchar dis4_6[] = {" 4:特定号码"}; //一级菜单6下的子菜单4void delay_1ms(uint x){uint i,j;for(j=0;j<x;j++)for(i=0;i<113;i++);}void write_cmd(uchar cmd)//写指令数据到LCD :RS=L,RW=L,E=高脉冲,D0-D7=指令码{LCD_RS_LOW ;LCD_RW_LOW ;LCD_EN_LOW ;P5OUT = cmd;delay_1ms(1);LCD_EN_HIGH;delay_1ms(1);LCD_EN_LOW;}void write_dat(uchar dat)//写显示数据到LCD :RS=H,RW=L,E=高脉冲,D0-D7=数据。

基于Lite_FET-Pro430_Elprotronic的MSP430下载

基于Lite_FET-Pro430_Elprotronic的MSP430下载

程序下载方法
1:首先安装Lite FET‐Pro430 Elprotronic,点击Setup.exe。

具体如何安装就不做详细介绍,直接下一步到最后。

2:成功安装之后,重启电脑,启动软件,界面如下图所示:
3:Lite FET‐Pro430菜单设置
首先打开软件,点击菜单栏的Setup,再选择Connection/Device Reset,如图所示:
然后自设置图中指示的1处和2处,然后确定。

红色1:选择JTAG(4wire);
红色2:选择USB。

最后回到主界面如下图所示:
红色1:选择要烧录的硬件型号选择;
红色2:选择要下载的文件:txt格式的文件 红色3:点击AUTO PROG 下载程序
如果出现固件升级提示请选择否
红色4:程序下载成功后,点击RESET
下载完成如下图。

IAR-for-MSP430新手教程

IAR-for-MSP430新手教程

IAR-for-MSP430新手教程IAR for 430软件的设置与调试1.运行IAR EmbededWorkbench经常使用的话,可以在桌面上建一个快捷方式,这样比较方遍2. project 的建立打开IAR4.11会出现一个工程建立的向导选第一个就可以在现在的workspace建立一个new project,再点OK 就行了如果不用向导,可以按一下步骤:(1)选择主菜单的File >New>Workspace命令,然后开启一个空白工作区窗口(2)选择主菜单Project>Create New Project,弹出生成新项目窗口中我们选择Empty project。

点击OK写好代码后,选择主菜单的File >Save命令文件名可以自己起,但后面一定要加”.c”,保存为C文件右击工程名,将写好的程序添加进去Add>Add Files选好后点击打开对于刚存好的程序,例如例子中的main.c,也可以用Add>Add “main.c”添加入工程。

如果工程很庞大,需要添加的文件很多。

可以用Add>Add Group,加入新的组,将加入的文件分组管理。

4. 软件的设置将工程建好后,往往需要先进行设置,才能正常的使用现在说说一些常用的设置。

右击工程名,点击Option可以看到首先是在General Option中修改Device这要根据你所用的芯片选取,如图中的MSP430F149 然后在Debugger中修改DriverSimulator是用软件仿真FET Debugger是用Jtag调试接下来在FET Debugger中修改Connection第一项是TI的USB-Jtag 可以用U口调试第二项是普通的Jtag,要用到计算机的并口调试第三项是J-link,在新版本的IAR EW430中没有这一项后面的几项不常用现在选择第二项,如果电脑有多个并口,还需选择并口号注意:在连到并口时,可能会出现连接错误,应该检查目标板电源是否正常,是否有其他程序占用了并口,在BIOS中将并口设置为ECP方式,连接线是否有断路或短路至此,基本的设置结束,其他还有许多选项,大家可以自己摸索。

MSP430BSL使用说明

MSP430BSL使用说明

MSP430BSL 使用说明REV 3.0首先感谢您购买了本公司的MSP430开发工具我们将为您提供最完善的售后服务和最全面的技术支持下图是MSP430BSL的产品清单1、MSP430BSL*12、DB9针对孔串口连线*13、10芯扁平连线*14、附有BSL软件的光盘*1一、BSL的介绍什么是BSL(Bootstrap loader)? Bootstrap loader是MSP430FLASH系列单片机独有的一项功能。

在程序空间、RAM之外有1K左右的引导区,用来存放430的BOOTROM文件(这是一个引导ROM,类似网卡上的BOOTROM)。

当外界给芯片提供一种特定的激励时,芯片内的引导程序开始工作,引导外部数据写入片内ROM、RAM区,或者是发送片内数据到外部。

这些都是通过一个软UART来完成的。

如果是FLASH系列的单片机,则FLASH空间包含了ROM和RAM。

这个引导程序是固化在BOOTROM空间内,而且是一个用户不能直接使用和修改的存储空间。

430BSL的主要原理是通过芯片特殊的上电复位后,引导片外代码烧录到片内FLASH中,来完成系统编程的。

我们的MSP430BSL工具使用非常方便,图形化的界面让你通过鼠标就能顺利下载代码,读出内部任何数据。

这里提及的代码是TI专用的430-TXT格式文本,可以通过IAR-EW430的编译器生成。

MSP430BSL的主要特点1、代码下载。

下载任意编译系统提供的标准430-TXT源代码。

2、读出芯片内的程序、信息FLASH等随意指定空间。

目前支持TI推出的MSP430 FLASH全系列芯片,包括一些补丁程序所做的修改,都在REV3.0软件上做了改进。

3、芯片加密后还能通过256BIT密码字校验后下载、升级、读写芯片内容。

对一些产品遭受破坏还需要读出内部数据来说是非常好的一种工具。

其在仪表的软件调校上也有很广泛的应用。

(JTAG接口一般不留在成熟的产品里)4、尺寸小,随身携带。

MSP430 中文版用户指南

MSP430 中文版用户指南

用于MSP430™的IAR嵌入式工作平台版本3+用户指南Literature Number:ZHCU026XJune2004–Revised November2011内容Preface (5)1现在就开始! (7)1.1软件安装 (8)1.2LED闪烁 (8)1.3光盘和网络上重要的MSP430文档 (9)2开发流程 (10)2.1概述 (11)2.2使用KickStart (11)2.2.1项目设置 (12)2.2.2用于MSP430L092/MSP430C092的附件项目设置 (13)2.2.3从零开始创建一个项目 (15)2.2.4用于LPMx.5调试的附加项目设置 (16)2.2.5MSP430器件的密码保护 (17)2.2.6使用一个现有的IAR V1.x/V2.x/V3.x项目 (18)2.2.7堆栈管理和.xcl文件 (18)2.2.8如何生成德州仪器(TI).TXT(和其它格式)文件 (18)2.2.9示例程序概述 (18)2.3使用C-SPY (18)2.3.1断点类型 (19)2.3.2使用断点 (20)2.3.3使用单步执行 (21)2.3.4使用观察窗口 (21)A常见问题和解答 (23)A.1硬件 (24)A.2程序开发(汇编语言、C语言编译器、连接器) (24)A.3调试中(C-SPY) (26)B FET专用菜单 (30)B.1菜单 (31)B.1.1Emulator→Device Information (31)B.1.2Emulator→Release JTAG on Go (31)B.1.3Emulator→Resynchronize JTAG (31)B.1.4Emulator→Init New Device (31)B.1.5Emulator→Secure-Blow JTAG Fuse (31)B.1.6Emulator→Breakpoint Usage (31)B.1.7Emulator→Advanced→Clock Control (31)B.1.8Emulator→Advanced→Emulation Mode (31)B.1.9Emulator→Advanced→Memory Dump (32)B.1.10Emulator→Advanced→Breakpoint Combiner (32)B.1.11Emulator→State Storage Control (32)B.1.12Emulator→State Storage Window (32)B.1.13Emulator→Sequencer Control (32)B.1.14Emulator→"Power on"Reset (32)B.1.15Emulator→GIE on/off (32)B.1.16Emulator→Leave Target Running (32)B.1.17Emulator→Force Single Stepping (32)文档修订历史记录 (33)图片列表1-1.激活项目 (8)1-2.在Workspace Overview中激活项目 (9)2-1.L092模式 (13)2-2.C092仿真模式 (13)2-3.C092密码 (14)2-4.启用LPMx.5 (16)2-5.LPMx.5通知 (17)2-6.JTAG密码 (17)图表列表2-1.器件架构、断点和其它仿真特性 (19)4图片列表ZHCU026X–June2004–Revised November2011PrefaceZHCU026X–June2004–Revised November2011请先阅读关于本手册这本手册说明了IAR嵌入式工作平台(EW430)(带有MSP430超低功耗微控制器)™的使用方法。

教学课件 MSP430超低功耗单片机原理与应用(第3版)

教学课件 MSP430超低功耗单片机原理与应用(第3版)
• 可以很方便的实现多机和分布式控制。使整个系 统的效率和可靠性大为提高
单片机的应用
• 工业控制 • 智能化的仪器仪表 • 日常生活中的电器产品 • 计算机网络与通信方面 • 计算机外部设备
1.2 MSP430系列单片机
MSP430单片机主要系列
MSP430单片机主要系列
MSP430系列单片机的特点
• 超低功耗架构与高度灵活的时钟系统可显著延长 电池使用寿命:0.1µA RAM保持模式;<1µA RTC 模式; <100µA/MHz。
• 集成型智能外设:众多的高性能模拟与数字外设 可大幅减轻CPU的工作量。
• 简单易用的16位RISC CPU架构,可实现具有业界 领先代码密度的新型应用。
• 完整的产品开发环境。 • 增强型程序库有益于多种应用。
– 所有存储器,包括RAM,Flash/ROM, 信息内存,特
殊功能寄存器(SFRs), 和外设寄存器。 Memory Address
Description
Access
End: Start:
0FFFFh 0FFE0h
Interrupt Vector Table
Word/Byte
End:
0FFDFh
Start *:
单片机的分类:
1) 通用型:把可开发的资源全部提供给使 用者。MSP430系列即为通用型单片机
单片机的特点
• 小巧灵活、成本低、易于产品化,它能方便的组 装成各种智能式控制设备以及各种智能仪器仪表
• 面向控制,能针对性的解决从简单到复杂的各类 控制任务,因而能获得最佳性能价格比
• 抗干扰能力强,适应温度范围宽,在各种恶劣环 境下都能可靠的工作,这是其他机型无法比拟的
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "msp430x14x.h"#include "lcd12864.h"#include "jianpan.h"#include "fun.h"#define uchar unsigned char#define uint unsigned intuchar func_index;uint i;void (*current_operation_index)();/********************主函数******************************************/ void main(){ P1DIR=0Xf0;P1OUT=0X00;WDTCTL = WDTPW + WDTHOLD;lcd12864_init();init();//初始化LCD模块delay2(1);while(1){/*******************find index****************************/if(P1IN==0X0E){func_index=table[func_index].up; //向上翻while((P1IN&0x0f)!=0x0f);//松手检测write_con(0x01);//清屏}if(P1IN==0x0D){func_index=table[func_index].down; //向下翻while((P1IN&0x0f)!=0x0f);write_con(0x01);//清屏}if(P1IN==0x0B){func_index=table[func_index].enter; //确认while((P1IN&0x0f)!=0x0f);write_con(0x01);//清屏}current_operation_index=table[func_index].current_operation;(*current_operation_index)();//执行当前操作函数}}#include"msp430f149.h"#define uchar unsigned char#define uint unsigned int#define keyin (P1IN&0X0F)uchar keyValue;/****************延时1ms******************/void delay2(uchar time){uint i,j;for(i=0;i<time;i++){for(j=0;j<150;j++);}}#include"msp430f149.h"/****************菜单结构体***************************/typedef struct{uchar current;uchar up;//向上翻索引号uchar down;//向下翻索引号uchar enter;//确认索引号void (*current_operation)();} key_table;/**************菜单功能显示***********************************/ void fun1(){display_hz(1,0,"【菜单1 】",12);display_hz(2,1,"菜单2",3);display_hz(3,1,"菜单3",3);display_hz(4,3,"返回",2);}void fun2(){display_hz(1,1,"菜单1",2);display_hz(2,0,"【菜单2 】",2);display_hz(3,1,"菜单3",2);display_hz(4,3,"返回",2);}void fun3(){display_hz(1,1,"菜单1",2);display_hz(2,1,"菜单2",2);display_hz(3,0,"【菜单3 】",2);display_hz(4,3,"返回",2);}void fun4(){display_hz(1,1,"菜单1",2);display_hz(2,1,"菜单2",2);display_hz(3,1,"菜单3",2);display_hz(4,2,"【返回】",2);}void fun5(){display_hz(1,0,"【菜单1.1 】",2);display_hz(2,1,"菜单1.2",2);display_hz(3,1,"菜单1.3",2);display_hz(4,3,"返回",2);void fun6(){display_hz(1,1,"菜单1.1",2); display_hz(2,0,"【菜单1.2 】",2); display_hz(3,1,"菜单1.3",2); display_hz(4,3,"返回",2);}void fun7(){display_hz(1,1,"菜单1.1",2); display_hz(2,1,"菜单1.2",2); display_hz(3,0,"【菜单1.3 】",2); display_hz(4,3,"返回",2);}void fun8(){display_hz(1,1,"菜单1.1",2); display_hz(2,1,"菜单1.2",2); display_hz(3,1,"菜单1.3",2); display_hz(4,2,"【返回】",2);}void fun9(){display_hz(1,0,"【菜单2.1 】",2); display_hz(2,1,"菜单2.2",2); display_hz(3,1,"菜单2.3",2); display_hz(4,3,"返回",2);}void fun10(){display_hz(1,1,"菜单2.1",2); display_hz(2,0,"【菜单2.2 】",2); display_hz(3,1,"菜单2.3",2); display_hz(4,3,"返回",2);}void fun11(){display_hz(1,1,"菜单2.1",2); display_hz(2,1,"菜单2.2",2); display_hz(3,0,"【菜单2.3 】",2); display_hz(4,3,"返回",2);}void fun12()display_hz(1,1,"菜单2.1",2); display_hz(2,1,"菜单2.2",2); display_hz(3,1,"菜单2.3",2); display_hz(4,2,"【返回】",2);}void fun13(){display_hz(1,0,"【菜单3.1 】",2); display_hz(2,1,"菜单3.2",2); display_hz(3,1,"菜单3.3",2); display_hz(4,3,"返回",2);}void fun14(){display_hz(1,1,"菜单3.1",2); display_hz(2,0,"【菜单3.2 】",2); display_hz(3,1,"菜单3.3",2); display_hz(4,3,"返回",2);}void fun15(){display_hz(1,1,"菜单3.1",2); display_hz(2,1,"菜单3.2",2); display_hz(3,0,"【菜单3.3 】",2); display_hz(4,3,"返回",2);}void fun16(){display_hz(1,1,"菜单3.1",2); display_hz(2,1,"菜单3.2",2); display_hz(3,1,"菜单3.3",2); display_hz(4,2,"【返回】",2);}void fun17(){display_hz(1,1,"菜单1.1.1",2); display_hz(2,1,"菜单1.1.2",2); display_hz(3,1,"菜单1.1.3",2); display_hz(4,2,"【返回】",2);}void fun18(){display_hz(1,1,"菜单1.2.1",3);display_hz(3,1,"菜单1.2.3",3); display_hz(4,2,"【返回】",2);}void fun19(){display_hz(1,1,"菜单1.3.1",2);display_hz(2,1,"菜单1.3.2",2);display_hz(3,1,"菜单1.3.3",2);display_hz(4,2,"【返回】",2); }void fun20(){display_hz(1,1,"菜单2.1.1",2); display_hz(2,1,"菜单2.1.2",2); display_hz(3,1,"菜单2.1.3",2); display_hz(4,2,"【返回】",2); }void fun21(){display_hz(1,1,"菜单2.2.1",2); display_hz(2,1,"菜单2.2.2",2); display_hz(3,1,"菜单2.2.3",2); display_hz(4,2,"【返回】",2); }void fun22(){display_hz(1,1,"菜单2.3.1",2); display_hz(2,1,"菜单2.3.2",2); display_hz(3,1,"菜单2.3.3",2); display_hz(4,2,"【返回】",2); }void fun23(){display_hz(1,1,"菜单3.1.1",2); display_hz(2,1,"菜单3.1.2",2); display_hz(3,1,"菜单3.1.3",2); display_hz(4,2,"【返回】",2); }void fun24(){display_hz(1,1,"菜单3.2.1",2); display_hz(2,1,"菜单3.2.2",2); display_hz(3,1,"菜单3.2.3",2);}void fun25(){display_hz(1,1,"菜单3.3.1",2);display_hz(2,1,"菜单3.3.2",2);display_hz(3,1,"菜单3.3.3",2);display_hz(4,2,"【返回】",2);}void fun26(){display_hz(1,0,"错",2);display_hz(2,0,"误",2);display_hz(3,0,"操",2);display_hz(4,0,"作",2);}/**************************结构体数组***************************************/ key_table table[30]={{0,3,1,4,(*fun1)},//第一层,显示【菜单1】、菜单2、菜单3 、返回{1,0,2,8,(*fun2)},//第一层,显示菜单1、【菜单2】、菜单3 、返回{2,1,3,12,(*fun3)},//第一层,显示菜单1、菜单2、【菜单3】、返回{3,2,0,25,(*fun4)},//第一层,显示菜单1、菜单2、菜单3 、【返回】{4,7,5,16,(*fun5)},//第二层,菜单1层下显示【菜单1.1】、菜单1.2、菜单1.3、返回{5,4,6,17,(*fun6)},//第二层,菜单1层下显示菜单1.1、【菜单1.2】、菜单1.3、返回{6,5,7,18,(*fun7)}, //第二层,菜单1层下显示菜单1.1、菜单1.2、【菜单1.3】、返回{7,6,4,0,(*fun8)},//第二层,菜单1层下显示菜单1.1、菜单1.2、菜单1.3、【返回】{8,11,9,19,(*fun9)},//第二层,菜单2层下显示【菜单2.1】、菜单2.2、菜单2.3、返回{9,8,10,20,(*fun10)},//第二层,菜单2层下显示菜单2.1、【菜单2.2】、菜单2.3、返回{10,9,11,21,(*fun11)}, //第二层,菜单2层下显示菜单2.1、菜单2.2、【菜单2.3】、返回{11,10,8,1,(*fun12)},//第二层,菜单2层下显示菜单2.1、菜单2.2、菜单2.3、【返回】{12,15,13,22,(*fun13)},//第二层,菜单3层下显示【菜单3.1】、菜单3.2、菜单3.3、返回{13,12,14,23,(*fun14)}, //第二层,菜单3层下显示菜单3.1、【菜单3.2】、菜单3.3、返回{14,13,15,24,(*fun15)}, //第二层,菜单3层下显示菜单3.1、菜单3.2、【菜单3.3】、返回{15,14,12,2,(*fun16)}, //第二层,菜单3层下显示菜单3.1、菜单3.2、菜单3.3、【返回】{16,16,16,4,(*fun17)}, //第三层,菜单1.1层{17,17,17,5,(*fun18)}, //第三层,菜单1.2层{18,18,18,6,(*fun19)}, //第三层,菜单1.3层{19,19,19,8,(*fun20)}, //第三层,菜单2.1层{20,20,20,9,(*fun21)}, //第三层,菜单2.2层{21,21,21,10,(*fun22)}, //第三层,菜单2.3层{22,22,22,12,(*fun23)}, //第三层,菜单3.1层{23,23,23,13,(*fun24)}, //第三层,菜单3.2层{24,24,24,14,(*fun25)}, //第三层,菜单3.3层{25,25,25,0,(*fun26)}, //第0层};#include"msp430f149.h"#define uchar unsigned char#define uint unsigned int#define RS_0 (P3OUT&=~BIT0)#define RS_1 (P3OUT|=BIT0)#define RW_0 (P3OUT&=~BIT1)#define RW_1 (P3OUT|=BIT1)#define EN_0 (P3OUT&=~BIT2)#define EN_1 (P3OUT|=BIT2)/****************延时1ms******************/void delay1(uchar time){uint i,j;for(i=0;i<time;i++){for(j=0;j<150;j++);}}/*************IO初始化*****************************/void lcd12864_init(void){P4DIR=0XFF;P6DIR|=BIT2;P6DIR |= BIT3;P3DIR|=0X07;}/**********lcdd写指令**************************/void write_con(uchar con){RS_0;RW_0;EN_0;P4OUT=con;delay1(2);EN_1;EN_0;}/****************lcd写数据********************************/ void write_data(uchar data){RS_1;RW_0;EN_0;P4OUT=data;delay1(2);EN_1;EN_0;}/***********lcd初始化****************************/void init(){P6OUT|=0X04;P6OUT |= BIT3;write_con(0x30);//基本指令集delay1(2);write_con(0x02);//地址归位delay1(2);write_con(0x0c);//显示delay1(2);write_con(0x01);//清屏delay1(2);write_con(0x06);//点设定delay1(2);}/*****************lcd写指令/数据地址****************************/void write_ardd(uchar hang,uchar lie){switch(hang){case 1 :write_con(0x80+lie);break;case 2 :write_con(0x90+lie);break;case 3 :write_con(0x88+lie);break;case 4 :write_con(0x98+lie);break;default:break;}}/*********************lcd显示数据串**************************************/ void display_shujc(uchar hang,uchar lie,uint shujc){uint i;uchar tab[4];write_ardd(hang,lie);tab[0]=shujc/1000;tab[1]=shujc%1000/100;tab[2]=shujc%100/10;tab[3]=shujc%10;for(i=0;i<4;i++){write_data(0x30+tab[i]);}}/***********************lcd显示数字******************************************/ void display_shuzi(uchar hang,uchar lie,uchar shuzi){write_ardd(hang,lie);write_data(0x30+shuzi);}/************************lcd显示汉字*****************************************************/void display_hz(uchar hang,uchar lie,uchar *data,uchar shu){uint i;write_ardd(hang,lie);for(i=0;i<shu;i++){while(*data!='\0'){write_data(*data);data++;}}}。

相关文档
最新文档