版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LaunchPad口袋实验11第1讲CCS软件应用青岛大学 德州仪MSP430单片机共2安装不要使用中文路文件向 学计划部索取,供100台计算机同时使用3CCS的
4WorkSpace有什么只有同一个WorkSpace文件夹的工程,可以显示在同一软件时激活编辑和使用5更改CCS的Workspace方法在安装到“Selectaworkspace”的时候,可以不勾选图2.2中的小框样的话,每次启动CCS都会询问,更改Workspace将会很方6更改CCS的Workspace的方法除了在启动CCS时选择WorkSpace外,还可以电点击Workspace。CCS将会重新启动,切换到新的Workspace77新建或添加工程和只能在同一个Workspace中新建或添加工88添加现有工9按一般的浏览文件夹注意,勾选上Copyprojectsintoworkspace,这样一旦选择的即使不是 外部在任何一个工程中,都包含main.c文件,还可以有很多其他文 中,可以通过新建或者直接COPY的方法加文件夹或c文件、h外部文件的路径仅仅将外部文件和文件夹“加”进工不到sourcefile的错在工 下,专门有一个Include,表示外部文件的路径如图所示的两个路径是系统自带的,并没有解决src文件夹的路径问在工程名上点击右键菜单,选择最后一项“Properties”,点击点 添加外部文件路径外部文件应该放在workspace文件夹的相应工程文件夹最好使用相对路箭头指示部分的意思是外部文件放在了“工作空间中的工程文件夹下的文件夹里。例子中这个工程的外部文件放在了工程名文件夹下面的src文件夹左图是缺少外部文件路径的右图则包含有正确的程序的编译 、仿真、调程序编写完成后,点 即可开始编译。根据图中所示的编译错提示窗逐条修改错误点 和仿真了,耐心等待后,得到仿真调试界面完成后,代码 到G2单片机里,点 开始运行程CCS创建工程闪烁灯程序:P1.6接LED,通过长延时实现LED闪烁 外部文件的函void{WDTCTL=WDTPW+WDTHOLD;P1DIR=BIT6;{}}
//关//P1.6设为输//调用子函名称功能:控制LED亮说明:通过长延时控制LED亮void{ //LED亮灭改}练习 外部文件中的函建立Sample工在工程中添加src文件,添加“Sample/src”路新建Blink.c,将Blink_LED()函数写进新建Bilnk.h文件,将externvoidBlink_LED()写入,表示其为外部在main.c中包含头文件,#includeCCS观测数据CCS的Graph功能可以将数组数据以“波形图”的方式下面的程序中,将构造一个三角波数据数#includevoidmain(void){inti=WDTCTLWDTPWWDTHOLD;//
DataTable[i]=i;} //}}在仿真运行后,点击AcquisitionBufferDspDataStart yData在断点位置点击右键,编辑断点属性。将Action改为RefreshWindows,这样就可以连续更新 yDataSize设 的显示效练习1.2:自行构造一个波形数组,并显示出
配置GraceGrace(GraphicalCodeEngine)法配置功能寄存器一个普通工程不能“半 ”转变成Grace工程,一定要在新建工程的刻就选为Grace工程Grace的图形化操在工程浏览窗口点击main.cfg[Grace],接着在主窗口点击Overview进入可配置资源框图Grace配置BCS先勾选Enablexxx(时钟模块默认被勾选),然后就会出现OverviewBasicUser、PowerUser、Register四个按相当于提供了说组合功能位则有下拉菜鼠标放在每个选项上都会有应的说不属于本模块的控制位,是可选Grace代码的移我们点击文件保 ,就完了对时钟模块的配置点激活当前工程再点 进行编译耐心等待完成,杀毒软件可能警报,请配合工 中多出src文件练习1.3利用Grace配置系第2讲扩展板青岛大学 德州仪MSP430单片机共供电非“轨至轨”单电源供电的运放,不仅无法处理负电压信号甚至接近0V的正电压信号也是不能处理由于扩展板需要对双极性信号进行处理,所以使用了双电源供电的电荷泵反压电路原Q1和Q3闭合,飞电容C(flyingcapacitor)被正电源充上左正右负的压Q1和Q3断开后,Q2和Q4闭合,飞电容C给滤波电容CF触摸板电容触摸的实现方案大体分测RC振荡频率和测RC充电时 I2C扩展IO对于低速的IO,可以通过串行转并I2C接口控制的IO扩 TCA6416A,扩展出16个双向IO机械按键及LED4个机械按8个LCD显示128段LCD驱动与滤波器双极性信号采样3个电阻构成电平偏置网络,解决用单极性ADC仅用1个比较器可以构成的Slope型ADC(积分型)它可以用来测量大量基于电阻值改变原理构成的传感TF卡单TF卡也叫MircoSD卡,与SD卡的引脚操作几乎完一个 加上1个上拉电阻,两个滤波电容便可用上物美价廉的TF卡不仅获得物美价廉 DAC单DAC8411/8311/7311做一个基于DDS的任意波形发生器AWGAWG:ArbitraryWaveformGenerator音频功放单除了可以用眼睛看示用DAC加上音频功放 音频的方案可以实现音使用蜂鸣 音使用无源蜂鸣器充当由于音 练习2.1:烧录全部实验例程,观测现打开预存在计算机上的“实验例 ”文件打开实验例 ppt,即可获得全程指导通过 第3讲MSP430的时钟与青岛大学 德州仪MSP430单片机共为什么要搞这么多单片机的低功耗主要是依靠间歇工作实现的,而间歇工作的法就是启停系统时钟如果像普通51单片机那样只有一个时钟,关掉时钟意味着单机全面停工,节能的MSP430单片机的系统MCLK频率配置的越高,CPU执行的速度越快CPU速度越快功耗也越高,但高频率的MCLK可以让CPU工作间更短需要高速时钟的片内外设提供服务,比如定时器和ADC采样当CPU休眠时,只要SMCLK开启,定时器和ADC仍可工作辅助时钟的频率很低,所以即使一直 耗也不辅助时钟可以供给那些只需低频时钟的片内外与定时器配合间歇唤醒CPU系统时钟的处于成本和使用方便系统高频时MCLK
低频片 片 片 片数控振
高频晶
低频振
低频晶锁频环FLL分频容易,倍频FLL基于负反馈原理,频率精确稳数控振
时钟输出
分频系数DCORC振荡RC振荡分频混频混频原用不同比例交替输出混频信号的总周期包含32个脉MODx用来决定两种信号所占的个时钟的振还是振还是DCO的三个参数用现成,不要自己去配DCO参数配成DCO的出厂校验参每块G2单片机的都存有出厂4种DCO的RSELx、DCOx、MODx的参低功耗停关停关节能模式的功耗对LPM0与实际只有LPM0和LPM3最有用LPM4可以用来当关机吱一声就能进出低定时器定时器其实就是计数器,如果是对恒频脉冲计数,就成了定时器根据定时达到后 不同,可分为BT、WDT、TA几种类型Basic简称
Watch
闹
闹
闹
挂定时值有
就几个值
定时值
首选24中中 复
中控制IO
瞬间记录件发生定时BT和WDT经常做为节拍“闹钟”来使用,实现CPU的无阻塞与低功下面的例子中,闹钟被设定为5分钟响一次
→重TimerA的结为了解放CPU的生产力TA的主定时处于方便的考可能会按24小时循环,也可能是12小时循环MCx=01,增计数模相当于设定任意小时制,由TACCR0寄存器决TACCR0的地位比TACCR1和TACCR0要特殊MCx=11,增减计也相当于设定任意小时制,同样由TACCR0决定时长只不过“到点”后不是归零,而是变倒计TA主定时器的为什么搞这么复杂的多功能时钟呢?一切都是为 主定时器的中断时刻捕获/比较模块Timer_A的有捕获/比较模块CCRx并不是独立的功依靠16位主定时器工才能工作
择捕获/捕获模主定时器一般设置为当CCRx检测到CCIx(某带捕获功能的IO口)TAR寄存器的值并写入TACCRx下降沿-上升沿=脉 上升沿-上升沿=周硬件捕获法与中断外部外部中断捕获立刻定时器值这时的定时器值配置捕获功SCS寄存器控制同步捕获还是异步捕获,一般均设为同步捕标志位COV=1代表数据覆盖,上次TACCRx数据覆盖了TACCRx的异常情
比较模块当CCR1/2发现TAR的值与TACCR0或它们自己的TACCRx相等时,便自动改变输出IO口TAx的输出电平,从而生成波改变的规则由OUTMODx寄存器决定,共有8OUTMODEx有用的虽然MCx+OUTMODx的排列组合将有24种,但是只有几种组合是“有的”,用于生成以下4种特定波单稳态脉增计普增计数模死增减计三增计input与INPUT远比OUTPUT复杂判断输入的程序极易造成CPU阻塞IO必从车站接
送站80元,接站120
送人去车
主
主机械按键的中断在一次按键过程中,会有若干次下降沿,只有1是真正的按 如图所示的按键过程中, 5次中断检测到下降沿1和4后,关闭中断,用延时可以消灭2、3、51延时后,电平仍然是0,4延时后,电平会变成1。据此用if语句可判出4不是按下,而是弹起的毛刺void{//----延时一段时间,避开机械抖动区域 //----判断按键状态是否与延时前一致{
//代码1:检测所有输入IO,确保只有1个IO中断被“记录//代码2:消灭下降沿2、3、//代码3:专门消灭下降沿//----判断具体哪个IO被按下,调用该IO 处理函{caseBIT0:P10_Onclick();break;caseBIT1:P11_Onclick();break;caseBIT2:P12_Onclick();break;caseBIT3:P13_Onclick();break;caseBIT4:P14_Onclick();break;caseBIT5:P15_Onclick();break;caseBIT6:P16_Onclick();break;caseBIT7:P17_Onclick();break; }}定时中断扫描法实M-XG开发板上.接了一个按键,和P接了L(用跳线帽连接,下面LD1亮 任务结
最难的 检测函数利用WDT定时器周期性的产生中在中断子函数中,判断IO只要满足WDT时间大于毛刺持续时间,小于按键持续时间,自动消void{unsignedchar
void
}
数数数数数主函#include void
voidvoidP13_Onclick();voidGPIO_init();voidWDT_init();voidmain(void)WDTCTLWDTPWWDTHOLD//);}
数
初始化函数名称:
voidvoid{
P1DIR|=BIT0+BIT6;P1OUT|=BIT0;P1OUT&=~BIT6;
P1REN|=P1OUT|=
//P1DIR&=//P1IES|=//P1IE|=BIT3}
允许P1.3
初始化函数名称:
voidvoid{WDTCTL=IE1|=WDTIE;}
数数
中断服务函数名称:功能:响应WDT
void#pragma interruptvoid{ }
数
处理函数*名称:*功能:P1.3的中断
void*说明:使
void{P1OUT^=BIT0;P1OUT^=BIT6;}
数
主函练习3.1:用 程序写法实现按键主函编写一个按键检测函数 使用初始化函使 检测函使 处理函使用LPM3低功耗休
中中断服函数数数
void休休3数数数WDTWDT初始函定时中断扫描法实现机械按键长短键识对于 程序 的发生就有对应解决方案长度按 的判断不仅与当前输入 )有关,还与之前的“积累应”(状态)这类非常普 的检测需要用 中的“状态机”件
状态 状
检 米利状机
查询状 摩尔状机状态机的建模方状态中判//---------状态中查 (Mealy状态机)----------{case0:if(Event_0)Action2(); if(Event_1){State=2;Action0();}//路径3if(Event_2)State=2; case1: if(Event_0)State2; if(Event_2){State=0; Action2();}//路径2case if(Event_1){ Action1();}//路径 }中查询状 if(Event0){//中断或扫描得知Event0 case//路径case//路径} {//中断或扫描得知 发casecase}
//路径//路径 {//中断或扫描得知 发switch(State)casecase}
}
//路径//路径
例程:长短按键的短按P1.3控制LED1的亮灭,长按P1.3控制LED2画出状态转换状态机程序建
void件长按 P13
短按 数P13
前高后前低前低后数
WDT主函
void
件前高后长按
短按 数
件前低后
主函//-----对状态机进行宏定义 //-----全局变量
50/*长键判别门限;//-----在main函数前提前函数voidGPIO_init();voidWDT_init();voidKey_SM();voidP13_OnShortRelease();voidP13_OnLongClick();WDTCTL=WDTPW+WDTHOLD;//关 //LPM3休}初始化函数
void
件前高后长按
短按 数
前低后数
WDT
初始化函数名称:void{P1OUT|=BIT0;P1OUT&=~BIT6;P1REN|=BIT3;P1OUT|=BIT3;}
初始化函数
void
前前高后长按
短按 前前低后数
初始化函数WDT设为16ms定时保证短于手按键的时其他WDT定时都不合适,1.9ms太短,250ms名称:void{}中断服务函数
void
件前高后
件前低后件数
中断服务函数在WDT定时节拍中,启用状态机来判 名称:功能:响应WDT*说明:不能直接判 #pragma interruptvoid{}状态机函数
void
件前高后长按
前低前低后数
Mealy状态机函数名称:功void{staticunsignedcharState=0;staticunsignedcharKey_Now=0;unsignedcharKey_Past=0;unsignedcharKey_Dect=0;
Mealy状态机函数{caseIDLE:WDT_Counter=0//if(Key_Dect==1)caseSHORT:if(Key_Dect==2)
caseLONG: }
}
State=IDLE; Moore状态机函数名称:功void{staticunsignedcharState=0;//状态机的状态变量staticunsignedcharKey_Now=0;//记录按键的当前电平unsignedcharKey_Past=0;
Moore状态机函数 {{;}}{{{casecase }}Moore状态机函数{{;}}}检测函数长按键的检测原理是计
void超过某一时长即判定为长。时长的单位选择为WDT定(周期)
前低前低后件
件长按
前高后
数
WDT检测函数名称:功能:对WDT中断计时,计 unsignedchar{if{}else}函
void
件前低后前低后件
函名称:功能:P1.3的短 说明:使 voidP13_OnShortRelease()//P1.3 {=}名称:功能:P1.3的长 void {}练习3.2:用状态机程序写法实现长短按键检 使用LPM3低功耗休。
))数
void33数数 第4讲自校验DCO青岛大学 德州仪MSP430单片机共结结构处理器的RAM和ROM统一编址,共用地址总线和数据总。器
区
Flash控制对Flash进行读操作无需任何硬件支持,就是读普通ROM对Flash写操作需要MSP430内部集成了FlashFlash编程时钟:写太快不可靠,写太 低Flash编程高压发生擦鞋Flash需要 Flash更高的电压如图是Flash按字节写入时序过程利用Flash进行掉电不擦
写
Flash操作库全局变量初始化函
段擦除函直接写字函
备份写字节函初始化函数Flash_Init( 范Flash_Init(3,'B3分频、对InfoBunsignedcharFlash_Init(unsignedcharDiv,unsignedcharSeg{if(Div<1)FCTL2FWKEYFSSEL_2Div- //初始化函数Flash_Init(SegPre=if(Seg<={
} {case case case'C':case'D':
SegAddr=0x10C0;break;SegAddr=0x1080;break;SegAddr=0x1040;break;SegAddr=0x1000;break;}}
擦除函数名称:功能:擦除void{unsignedchar*Ptr_SegAddr; //SegmentpointerPtr_SegAddr=(unsignedchar*)SegAddr; //InitializeFlashpointerFCTL1=FWKEY+FCTL3=//FCTL3=*Ptr_SegAddr=FCTL1=FWKEY;FCTL3=FWKEY+LOCK;//FCTL3=}
名称: charFlash_Direct_WriteWord(unsignedintAddr,unsignedint{unsignedintunsignedint //Segmentif((SegPre<=31&&Addr>=512)||(SegPre>31&&Addr>=64return0;returnPtr_SegAddrunsignedint*)temp//InitializeFlashpointerFCTL1=FWKEY+WRT;//正常写状态 );_enable_interrupts();//开总中断FCTL1=FWKEY;//退出写状态 return}备份擦写字节函数名称:{unsignedintunsignedchar*Ptr_SegAddr;unsignedcharBackupArray[64];unsignedchari=0;
//Segmentreturn备份擦写字节函数{Ptr_SegAddrunsignedchar*)temp//InitializeFlashpointer }FCTL1=FWKEY+WRT;FCTL3=FWKEY; FCTL3=FWKEYfor(i=0;i<64;{{
备份擦写字节函数Ptr_SegAddr=(unsignedchar*)temp;//InitializeFlash }{Ptr_SegAddr=(unsignedchar*)temp;//InitializeFlash*Ptr_SegAddr } }FCTL1 FCTL3FWKEY FCTL3FWKEY return}DCO测频fDCO25535/16ms1596kHz1.6MHzVLO测频基于上次TAR值25535fVLO32.768kHz(25535/45535)自校验DCO输出频率穷举DCO参数设置4位RSELx:16个档位,每档频率步进约35%(不靠谱),可看成粗。3位DCOx:8个档位,每档频率步进约8%(不靠谱),可看成细调DCOx15位MODx:32个档位,每档步
,可看成微调确定RSELx与得到全部Temp[]数据后,找出最接近f但小于的f的比如是Temp[35],这样我们就知道了。WDT存入确定固定RSELx=4、DCOx=3,依次增加MODx的值,找到最接近f时MODx值,比如说是12那么f对应的DCO参数就是RSELx=4、DCOx=3、MODx=12仿照出厂校验的做法,将3个参数存在infoFLash递增递增WDT找到自校验DCO自校准-MHz共个DCO(RLx,DC,MO),将参数写入IfsDCO主函void{WDTCTLWDTPW P1SEL|= P1DIR|=
}
16个“纯净”频6、写入)
8、循环输出 作变量和宏定注意(x)的写法,实现宏定义“传参”操作Temp[](不带MODx)和Ture_Freq[](带 的都是实际测的频率#include#include
CALDCO_MHz(x)*(unsignedchar*)(0x1080+(x- unsignedint
};unsignedcharMODx_Winer[CAL_NUM]={0};unsignedintInfoFlash_Data[CAL_NUM]={0};unsignedintTure_Freq[CAL_NUM]={0};
constunsignedint
16个“纯净”频6、写入)
循环输出 开始指示函数在很多时候,一个小小的LED可以给程序调试乃至设 ,故障排带来很大方便本例中,红色LED亮表示校验正在进名称:功能:红色LEDvoid{P1OUT|=BIT0;P1OUT&=~BIT6;}
16个“纯净”频6、写入)
循环输出 测频函数名称:说明:纯净频率是指MOD=0 unsignedlongunsignedcharTA0CTL|=TACLR;//);Freq_TempTA0R ;}}配置DCO的函数名称:功能:根据传入参数,设定DCO* 说明:{DCOCTL=BCSCTL1|=Num/8;
}WDT定时中断服务子WDT定时中断仅起到了延时唤醒的作名称:功能:响应WDT#pragma interruptvoid{ ); }
16个“纯净”频6、写入)
循环输出 比较函数名称:(){unsignedchari=0;unsignedintDelta_Min=0;unsignedintDelta_Now=0;unsignedchar{ 比较函数{{if {;}}}}}
16个“纯净”频6、写入)
循环输出 测频比较函数名称:(){unsignedcharmod_x=0;unsignedlongFreq_Temp=0;unsignedintDelta_Now=0;unsignedintDelta_Min=0;unsignedcharCalibrate_Num=0;{ 测频比较函数TA0CTL|=TACLR;_bis_SR_register(LPM0_bits);//CPU精确休眠1.9ms(1/512秒Freq_Temp Delta_Now=Calibrate_Frequence[Calibrate_Num]-(unsignedint)Freq_Temp;}if(Delta_Now<Delta_Min){//如果当前差值比“世界记录”还小时 Ture_Freq[Calibrate_Num]=(unsignedint)Freq_Temp;//记录校验后的准确频率
16个“纯净”频6、写入)
循环输出 数据合成函数*名称:*功能:*说明:void{
unsignedcharRSELx=0;unsignedcharDCOx=0;unsignedchari=0;{}}
16个“纯净”频6、写入)
循环输出 写Flash函数#include名称:说明:确保所有CCS工程的EraseOptions改为选择“Erasemainmemoryonly” unsignedcharBCSCTL1=DCOCTL=
/*SetDCOto1MHzFlash_Direct_WriteWord(i*2,InfoFlash_Data[i]);//不擦直接写}
16个“纯净”频6、写入)
循环输出 完成指示函数名称:功能:绿色LED点亮表示DCOvoid{P1OUT|=P1OUT}
16个“纯净”频6、写入)
循环输出 测试函数这是一个附加的程序功能,目的是校验完成后,隔3秒循 B,设定各个频率的DCO,输出到P1.4引脚(SMCLK输出引脚)名称:功能:间隔3秒循 void {unsigned ;{
if(i++{
t);} }}练习4.1:为自己的G2单片机建立DCO自定义需要校验的DCO频率参将校验参数写入infoB把以前写的工程中,配置DCO频率的代码,换成用自己的校验参数的码以后都可以用自己的校验参数来使用第5讲青岛大学 德州仪MSP430单片机共电容触摸 电容测量
G2系列单片机的IO器电容值与振荡频率Timer_A测频 电容触摸库将电容触摸转变为可像普通IO的输入状态寄存器PxIN那样进 设计全局变量TouchIN,等同于IO输入状态寄存器PxIN变量与宏定
在WDT中断内调
变量与宏定#include#define KEY0_INITP2DIR&=~BIT0;P2SEL&=~BIT0;P2SEL2|= KEY1_INITP2DIR&=~BIT5;P2SEL&=~BIT5;P2SEL2|= P2SEL2&~(BIT0 constunsigned 变变量与宏定变staticunsigned staticunsignedcharstaticunsignedchar软件unsignedchar //unsignedint 库函数头文
在WDT中断内调
库函数头文h头文件中, 真正需要对 的函数和全局变量,其他函数 在c文件中不可见当我们阅读大型程序时,第一件事不是看c文件,而是看h文件在h文件c文件中查看它们是什如果没有h文件 在 ”函数的海洋中,需找“宝贝”函数/*****TouchIN.h******/#ifndefTOUCHIN_H_#defineexternvoidTouchIN_Dect()externunsignedchar//externunsignedint
// /*TOUCHIN_H_触摸检测函数TouchIN_Dect(
在WDT中断内调
触摸检测函数TouchIN_Dect(使用函数将电容触摸名称:功 void{}
变量与宏定
在WDT中断内调
名称:功void{
if {case0:KEY0_INIT;break;case1:KEY1_INIT;break; }
TA0CTL }FIFO函数
在WDT中断内调
FIFO函数不直判手是接按,为有种扰。本程序 的方法是用最近。总是记录最近4次结果,这属于“先进先出”FIFO(FirstInputFirst)RAM 思想名称:void {(]) }按键仲裁函数
在WDT中断内调
按键仲裁函数连续4次符合门限要求,则判断为手指接触触摸键,连续4次都不符合限,则判断为手指离开触摸按键。结果写入全局变量TouchIN名称:功能:按 说明:连续void {if( TouchIN
if( TouchIN=1<<Key_Num;TouchIN
}电容触摸如图所示MSP-EXP430G2板上P1.0上接了一个在本书配套的LaunchPad扩展板上,将MSP430G2553的P2.0和P2.5出作为电容触要求按下P2.0后LED亮,按下P2.5后LED灭,程序运行过程中不阻CPU,并且实现低功耗运行 void处处理函外外部库函全全局变#include#includevoid#defineLED_ON P1OUT|=BIT0#defineLED_OFF P1OUT&=~BIT0voidmain(void)
WDTCTL P1DIR|=BIT0; P1OUT&=~BIT0;WDTCTL=WDT_ADLY_16;IE1|=WDTIE;
}
void处理函外外部库函全全局变相关函名称:功能:响应WDT#pragma interruptvoid{
/WatchdogTimerinterruptservicevoidvoid{if(TouchIN&if(TouchIN&LED_ON;}}名称:*功能:WDT定时中 练习5.1:电容触摸长短要求电容触摸短按键(松手)切换LED1状态,长按键(按下)切LED2状态状态机一实现功能是一致长短按键状态机程
void
前高后TouchIN前0后长按 处理函
短按 处理函
前低后TouchIN前1后
WDT
Key_SM()的修
WDT_ISR()的修P1IN天生存TouchIN需要在WDT中断中定时调用名称:功能:响应WDT*说明:不能直接判 #pragma interruptvoid{}第6讲段式液IO青岛大学 德州仪MSP430单片机共LCD原如图所示的液晶段码图中,凡是黑色阴影部分都被灌上 中的液,液晶块上如果加电压(通过透明金属镀膜)就会变得“不透光”,表为黑色如果把“共同进退”的黑块用透明导称为1LCD驱
简单的8字数码LCD的段液晶共有 和 任何一段要显示需要1个COMx和1个SEGx构成回路通电比 显示“Min”段,对应的就是COM1和SEG1通电,想显示“-”段应的就是COM2和SEG1通电段码宏定首先要对128段进行宏定#ifndef#define0123 0612389457显 思把任何显示任务分为顶层函数和底层函数,依靠显示缓存 ”顶层函数的任务就是决 显示什么,至于底层硬件实现显示,那我没半毛钱关显存共128分为8简单的显示控制函直接显示某段函数 ySeg():在对单位符号等段进行显示的候,直接调 定义将会非常方便直接消隐某段函数LCD_ClearSeg():在更新显示时 记消隐清除全屏显示函数LCD_Clear():当屏幕显示内容很多,需 清时,调用该函数名称 功范例 void {LCD_Buffer[SegNum/16]|=}简单的显示控制函名称:功{LCD_Buffer[SegNum/16]&=}名称:功能:清屏void{unsignedcharfor(i=0;i<=7;i++)}显示位至低位依次为0x17F7_B7D7_0000_00AF_AD6C_0100_0E5C_760017F7●●●●●●●●●●●B7D7●●●●●●●●●●●●000000AF●●●●●●AD6C●●●●●●●●●0100●0E5C●●●●●●●7600●●●●●876543210显单个数码函数 #define *名称 功能:让128段式液晶的特定“8字”段显示范例 void {switch{caseLCD_Buffer[0& switch{显单个数码函数 case0:LCD_Buffer[0]|=0x0eb0;case1:LCD_Buffer[0]|=0x0600;case2:LCD_Buffer[0]|=0x0c70;case3:LCD_Buffer[0]|=0x0e50;case4:LCD_Buffer[0]|=0x06c0;case5:LCD_Buffer[0]|=0x0ad0;case6:LCD_Buffer[0]|=0x0af0;case7:LCD_Buffer[0]|=0x0e00;case8:LCD_Buffer[0]|=0x0ef0;case9:LCD_Buffer[0]|=0x0ed0;}casecase
}}显示译码编显消显显显显显显显显显显12-3456789显示数字函数 由于段LCD容丰,难举用的函,以编际用根实情另调用LCD_Ds Dt()。 调 负数判别和负号显 数字的拆分显 消隐多余的 名称 功能:在LCD *说明:该函数仅限在大屏幕的8*范例:LCD_Dis yNum(12345);显示结果:12345 void yNum(longint{unsignedcharchar } {
}{ifelse}
{ }}底层HT1621HT的位显 8字16位→32字4硬 的思要想使用MSP-EXP430G2扩展板上这块128段式液晶比“登天”还要单片机必须用I2C协议去控制TCA6416A输出4个控制信号CS、WR、、DATA,哪怕只是改变一次CS的电平,实际工作量就是完整的I2C通了一次更不要说CS、WR、RD、DATA还需要复杂时序才能操作HT1621进控制128段式液晶TAC6416A的IO14、IO15、IO16、IO17用于控制用宏定义进行硬“PinOUT(14,0)”是命令I2C协议的TCA1621A的P1.4(IO14,第13个输出低电平的函数,实际实现起来是非常复杂的,但是对于HT1621来,直接用HT1621_CS_LOW就行,具体怎么把CS拉低不是自己要考#defineHT1621_CS_LOW#defineHT1621_CS_HIGH#defineHT1621_RD_LOW#defineHT1621_RD_HIGH#defineHT1621_WR_LOW#defineHT1621_WR_HIGH#defineHT1621_DATA_LOW
动动初始化初始化命令宏定#include"HT1621.h"#include"TCA6416A.h"#defineHT1621_CS_LOW#defineHT1621_CS_HIGH#defineHT1621_RD_LOW#defineHT1621_RD_HIGH#defineHT1621_WR_LOW#defineHT1621_WR_HIGH#defineHT1621_DATA_LOW
#define#defineHT1621_INIT#defineHT1621_ON#defineHT1621_OSC
//
位发送函数名称:功能:向HT1621{if{}{}
初始化函数名称:功能:HT1621说明:初始化为开启LCDvoid{unsignedchariunsignedcharHT1621_CS_HIGH;
{ 初始化函数for(i=0;i<8;i++){HT1621_SendBit(Temp&BIT7);Temp=Temp<<1;}HT1621_WR_LOW;和for(i=0;i<8;i++){HT1621_SendBit(Temp&BIT7);Temp=Temp<<1;}
; { HT1621_WR_LOW }
全显存刷新函数对于段式液晶的缓存来说,一共就128位,每次都完全将显存重写的方俗称“刷屏”。HT1621的连续写模式最适合用来刷屏第一段101代表是写显存操作,第二段是起始显存地址,后面都是数据地址自动递增全显存刷新函数名称:功能:更新HT1621说 {unsignedchariunsignedint {}全显存刷新函数{}{Temp={}} }单字节显存刷新函数大多数时候,无需刷新全部段数符号一般无需在运行中刷10个数字有必要单独要算出每个数字对应缓存中的据和位置通过计算,得出10个位置的数字,分别对应的缓存数据和的位位置直接8字数字 号除以4即可转换为HT1621的内存地址名称:功能:计算单个8voidCalculate_NumBuff(unsignedcharPosition,unsignedchar*Num_Buffer,unsignedchar*Addr){{以第一个“8”字为例,段号4-11,对应16位缓LCD_Buffer[0]的中间8case1:*Num_Buffer=(LCD_Buffer[0]&0x0ff0)>>4; case2:
case3:case4:case5:case6:case7:case8:case9:*Num_Buffer=(LCD_Buffer[7]&0x00ff); *Addr=112/4;break;case10:*Num_Buffer=(LCD_Buffer[7]&0xff00)>>8;*Addr=120/4; 名称:功能:只更新8{unsignedcharNum_Buffer=0;unsignedcharAddr=0;unsignedchari=0; {}{}{} }9例程-LCD显示自为MSP-EXP430G2扩展板编写一个LCD开机自检画面LCD的段依次从0段开始到127段全部点亮,再依次全 接着10个数码段的显示全部从0依次切换到9,然后清屏,主数码管显示123456最后显示“PASS” 化
段显示
-
段主函数部#definemyMCLKvoid void{unsignedcharWDTCTL=WDTPW+WDTHOLD;P1DIR=0;P2DIR=
BCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;{
/*SetDCOto1MHz
主函数部
{ } );}
主函数部
_bis_SR_register(LPM3_bits//字符显示函数 名称 功能:显示PASS*范例 void { } 练习6.1:调用LCD相关库函数进行显将TCA6416A的全部库函数加载到工程将HT1621的全部库函数加载到工程将LCD的段码显示译码库函数加载到工程利用库函数,实现LCD显示。青岛大学 德州仪MSP430单片机共ADC中的比SAR型ADC中,1个比较器有一批待测货物A,每一个质量都相同(实际是5.1g)。有1架天平和个1g的砝码B,天平的最大量程为8g,假设货物A的质量不超过天平量。经3次测量后,得出101,也就是5gFlashSAR型ADC只用了1个天Flash型ADC同时动用7个天平,依次设定砝码值为7g、6g、5g、4g、、2g、1g则一次就能得 ,按优先编码可得货物重量为5g实际Flash型ADC原理MCU中集成1个比较器可以干什SARSAR型1个比较器SLOPE1个比较Flash型数量巨大的比器比较器用于SLOPE(积分)型Slope型ADC适用于测量传感器电阻待测电阻与基准电阻如图所示为MSP-EXP430G2扩展板的SlopeADC实验单元,传感器电用一个拨盘电位器Rw电容充满
通过Rref放
放电值放电值
通过Rsens电
电容充满变量与宏定#include"Timer_A3.h"#include"ComparatorA.h"#definePORT_REF_LOW#definePORT_REF_HIGH
P1DIR|=BIT3;P1OUTP1DIR|=BIT3;P1OUT
#define
P1DIR& #define =#definePORT_SENS_HIGHP2DIR|BIT2;P2OUT #define#define
P2DIRTA0CTL|=
unsignedcharunsignedint
unsignedint SlopeADC库函数文处理函
初始化函
初始化函
利用Grace配置ComparatorA寄存初始化函数处理函
初始化函
初始化函
配 #include名称:功能:比较器模块初始化,从Gracevoid{CACTL1=CAEX+CAREF_1+CAON;CACTL2=P2CA3+P2CA1+CAF;CAPD=CAPD5;}#ifndef#defineexternvoid初始化函数处理函
初始化函
初始化函
Grace首先想到的就是借助Grace的Poweruser模式对其配置,如图17.11所,咦?输入通道中居然没有CCI1B通道可供Grace的寄存器模TA的主时钟源:选择SMCLK,连续计数模捕获模块:选择上升沿捕获,捕获源CCIxB,同步捕获,开启滤波Grace寄存器在Grace高级配置里,写 函数名,该函数将作为接口函数来使。光填上Slope_TA_CCI1B函数名,编译时还可能报错,CCS会提Slope_TA_CCI1B()没有 编译成功后,将Grace生成的初始化代码和中断配置代码合并,建Timer_A3.c文件#include#includevoid{TA0CTL TA0CCTL1CM_1CCIS_1SCSCAP+OUTMOD_0CCIE//O
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论