1、南京航空航天大学电子中心&TI南航430联合实验室2005年11月本讲稿可以在电子中心网站或www.open- 课件栏目下载南京航空航天大学电子中心&TI南航430联合实验室单片机也叫微控制器单片机就是单片计算机一个芯片就是一台计算机南京航空航天大学电子中心&TI南航430联合实验室计算机CPU两大营:INTEL AMD南京航空航天大学电子中心&TI南航430联合实验室 l按总线宽度分:l4位机; l8位机;l 16位机;l 32位机;l运行速度可以调整:l32Kl12Ml266M等l有很多国际大公司参与设计生产:l51系列 几十个公司生产lPIC系列 美国微芯l摩托罗拉l台湾l大陆苏州l飞利
2、浦的系列8位51系列以及32位ARM系列l德州仪器的系列430十六位单片机l南京东大可以生产ARM南京航空航天大学电子中心&TI南航430联合实验室l我们周围的单片机应用有:l空调l洗衣机l电视机l微波炉l电子手表l手机l食堂消费机l计算机外围:鼠标、键盘、硬盘、光碟l一辆汽车有40片左右单片机l等等 以上列举都是单片机应用。南京航空航天大学电子中心&TI南航430联合实验室CPU单元温度采集单元压缩机风机键盘显 示南京航空航天大学电子中心&TI南航430联合实验室lMSP430系列超低功耗16位单片机接口技术及系统设计实例 l 北航出版社 魏小龙 编著lMSP430系列单片机C语言程序设计与
3、开发 l 北航出版社 胡大可 编著南京航空航天大学电子中心&TI南航430联合实验室l强化理论知识l大量做实验l勤于思考l多动手l已经与MSP430厂家TI(德州仪器)建立了联合实验室,拥有60套实验设备。地点:3410。其中40套为赠送,20套购买南京航空航天大学电子中心&TI南航430联合实验室南京航空航天大学电子中心&TI南航430联合实验室 l16-Bit RISC 结构结构,l12-Bit A/Dl16-Bit Timer_Bl 16-Bit Timer_Al6 * 8 I/Ol比较器比较器lUSARTl160 Segments LCDl60KB+256B Flash Memory,
4、l2KB RAMl看门狗看门狗l基本定时器基本定时器l 南京航空航天大学电子中心&TI南航430联合实验室l上页内容MSP430F449全有l在仿真环境内,我们可以清楚地看到他们l打开仿真环境的对应窗口即可。南京航空航天大学电子中心&TI南航430联合实验室编写源代码修改程序硬件准备结束仿真调试满意?修改硬件软件不满意硬件不满意满意南京航空航天大学电子中心&TI南航430联合实验室l1、建立工程项目l2、编写源代码l3、将源代码添加到项目文件l4、选择器件l5、选择仿真方式l6、编译下载代码到芯片l7、仿真调试l(演示)数据类型字节数数据表示范围注释sfrb, sfrw1 声明字节或字长度的I
5、/O类型char (默认类型)10255等价于unsigned charchar (使用 -c 选项)1-128127等价于signed charsigned char1-128127 unsigned char10255 short, int2-3276832767 unsigned shortunsigned int2065535 long4121474836482147483647 unsigned long404294967295pointer2 指针类型float418E-3839E+38浮点类型double, long double418E-3839E+38 南京航空航天大学电子中
6、心&TI南航430联合实验室l条件语句条件语句 l开关语句开关语句 l循环语句循环语句 l返回语句返回语句 南京航空航天大学电子中心&TI南航430联合实验室l语句表达形式有3种(a、b、c):la if(条件表达式) 语句lbif(条件表达式) 语句1lelse 语句2lcif(条件表达式) 语句1lelse if(条件表达式) 语句2lelse if(条件表达式) 语句3l南京航空航天大学电子中心&TI南航430联合实验室lswitch(表达式)llcase 常量表达式1:语句1lbreak;lcase 常量表达式2:语句2lbreak;lcase 常量表达式3:语句3lbreak;lld
7、efault: 语句dl南京航空航天大学电子中心&TI南航430联合实验室lwhile(条件表达式) 语句;l当条件满足时,就反复执行后面的语句,一直执行到条件不满足时。以软件延时程序为例说明该语句是如何执行的。lvoid delay(long v)ll while(v!=0)v-;l南京航空航天大学电子中心&TI南航430联合实验室ldo 语句 while(条件表达式)l先执行一次循环体的语句,再判断条件是否满足,以决定是否再执行循环体。下面的程序将数组BUFF20中的全部数据相加。lInt x=0;lChar I=0;lDolx =BUFFI + x;lI=I+1;llwhile(I20)
8、;l南京航空航天大学电子中心&TI南航430联合实验室lfor(初值设定表达式;循环条件表达式;条件更新表达式)语句lfor语句常用于需固定循环次数的循环。下面的程序段同样实现将数组BUFF20中的全部数据相加的功能。lInt x=0;lChar I=0;lfor(I=0;I20;I+)lx =BUFFI + x;l南京航空航天大学电子中心&TI南航430联合实验室lgoto 语句标号lgoto语句常用于跳转到一个固定的地址标号。其中固定的地址标号是一个带“:”的标志符。比如:llMM:llgoto MMMl南京航空航天大学电子中心&TI南航430联合实验室l函数类型 函数名(形式参数表)l形
9、式参数说明ll局部变量定义l函数体语句ll存储变量类型 interrupt 中断矢量变量 函数类型 函数名(形式参数表)l形式参数说明ll局部变量定义l函数体语句l南京航空航天大学电子中心&TI南航430联合实验室void delay(long v)ll while(v!=0)v-;lldelay(100)究竟延时多久呢?就是这句话执行需要的时间。l时间等于:机器周期需要的机器周期数l(在仿真环境中可以测试出来)南京航空航天大学电子中心&TI南航430联合实验室P1P2P3P4P5P6南京航空航天大学电子中心&TI南航430联合实验室lPnDIR方向寄存器 1为输出、0为输入lPnOUT输出寄
10、存器1输出高、0为低lPnIN输入寄存器读出口线的状态lPnSEL第二功能寄存器n=1,2,3,4,5,6南京航空航天大学电子中心&TI南航430联合实验室l控制连接在P5.1口线的发光二极管的亮与熄:l首先、 P51为输出 P5DIR =0 x0 2;l亮输出1P5OUT = 2 ;l熄灭输出0P5OUT = 0 ;南京航空航天大学电子中心&TI南航430联合实验室l1、亮l2、延时1秒钟l3、熄灭l4、延时1秒钟l5、跳转到 步骤1l(演示)南京航空航天大学电子中心&TI南航430联合实验室l改变延时的时间参数l1、亮l2、延时1秒钟l3、熄灭l4、延时1秒钟l5、跳转到 步骤1l(演示)
11、南京航空航天大学电子中心&TI南航430联合实验室l增加一个变量xxlxx为模5计数器l只有当xx为1的时候第一发光管亮l只有当xx小于4的时候第二发光管亮l其余时间两个都熄灭l(5分钟时间学生自己编写程序)南京航空航天大学电子中心&TI南航430联合实验室lChar key_en=0;lIf(key=2)l key_en = key_en ;lIf(key=0)&(key_en=0)l lIf(key=1)&(key_en=0)l 南京航空航天大学电子中心&TI南航430联合实验室l按照顺序:KEY0-KEY1-KEY2 ;l KEY1-KEY0-KEY2 ;lK0-K0-K0-K1-K2-
12、K0-K2 ;lK2-K2-K0-K1-K2 ;l错误状态的清除 很重要!南京航空航天大学电子中心&TI南航430联合实验室l声音是什么?l声音是震动产生的;l扬声器发声的原理:处在磁场中的有电流的线圈产生震动,继而发声。l不同的频率产生不同的声音;lMSP430的端口可以输出不同的频率;l继而可以推动扬声器产生不同的声音。l下页的程序将发出什么声音呢?南京航空航天大学电子中心&TI南航430联合实验室lvoid gun(void)ll for(ff=40;ff200;ff+)l l P6OUT = BIT0; / 对输出置反l for(tmp=0;tmpff;tmp+); / 延时l l南京
13、航空航天大学电子中心&TI南航430联合实验室lvoid s1(void)ll for(ff=30;ff500;ff+)l l P6OUT = BIT0; / 对输出置反l for(tmp=0;tmpff;tmp+); / 延时l l南京航空航天大学电子中心&TI南航430联合实验室lvoid s2(void)ll for(ff=50;ff100;ff+)l l P6OUT = BIT0; / 对输出置反l for(tmp=0;tmpff;tmp+); / 延时l l南京航空航天大学电子中心&TI南航430联合实验室l以上三段程序的结构完全一样,但是效果完全不一样!l主要为:l频率不一样;l各
14、频率段的延时不一样。l第三段频率高,延时短。南京航空航天大学电子中心&TI南航430联合实验室CBEGAFDEGAFD以上为数码管的原理,实质为8只发光二级管,地端连接在一起,当给ADEG高电平时将显示数字“2”。CAE DBFGNDHG0111 1101 南京航空航天大学电子中心&TI南航430联合实验室l实验系统有6只数码管连接在端口上。l程序举例(演示)南京航空航天大学电子中心&TI南航430联合实验室l液晶显示器的控制寄存器lLCDCTLlLCDMEM Il常用:lLCDCTL = 0XDF ;南京航空航天大学电子中心&TI南航430联合实验室CBEGAFDCBEGAFD如果红色显示
15、将显示数字“2”如果HGFEDCBA对应一个字节的高到低位则显示码为:HGFEDCBA0 10 11 0 1 1 0 x5b 南京航空航天大学电子中心&TI南航430联合实验室H G F E D C B Al0l1l2l3l4l5l6l7l8l9南京航空航天大学电子中心&TI南航430联合实验室l什么是码表?l就是一个数组,用于查找对应数字的显示码lLCD_TAB10=0 x3f , 0 x06 , 0 x5b .;l当要 显示“1”的时候,使用语句:lLCDMEMN = LCD_TAB1 ;l为什么?南京航空航天大学电子中心&TI南航430联合实验室l依次显示06:lchar I ;lFor
16、(I=0;I7;I+) LCDMEMI = LCD_TABI ;南京航空航天大学电子中心&TI南航430联合实验室l作为思考题l自己编写程序 为上机内容南京航空航天大学电子中心&TI南航430联合实验室l作为思考题l上机内容南京航空航天大学电子中心&TI南航430联合实验室lTA的原理:南京航空航天大学电子中心&TI南航430联合实验室l4种工作模式:l连续l增l减l停南京航空航天大学电子中心&TI南航430联合实验室l控制寄存器 TACTLl捕获 / 比较寄存器南京航空航天大学电子中心&TI南航430联合实验室l产生1秒的定时信号:l首先 、选择输入信号来源l其次、 选择工作模式l最后、 设
17、定比较值l开启中断、启动定时器等待时间的到达。南京航空航天大学电子中心&TI南航430联合实验室l作为上机内容,请同学们自己编写完整程序l要点:l1、定时器 设置为1秒中断一次l2、写时间程序 两个60进制,一个24进制,7进制l3、时间送液晶显示l4、显示: 星期 时 分 秒 l5、 每秒发光二极管闪烁南京航空航天大学电子中心&TI南航430联合实验室l要点: 1、基于前面的时钟程序 2、增加时间控制 3、到达规定的时间点,发光二极管亮5秒南京航空航天大学电子中心&TI南航430联合实验室l扫描键盘为行列扫描l扫描键盘的完整程序为:l1、判断是否有按键按下;l2、判断是哪个按键按下;l3、判
18、断是否按键松开。南京航空航天大学电子中心&TI南航430联合实验室l电路原理图 行线P11、P12、P13l 列线P14、P15、P16、P17全上拉P13 P14 P16P17P15P12P11南京航空航天大学电子中心&TI南航430联合实验室l首先、设置端口:行线为输出、列线为输入。l然后、行线输出为低电平l最后判断:l如果有按键按下,则列线不全为高电平,l如果没有键按下,则列线全部为高电平。lchar Keyj(void)llP1DIR = 0 x0E; / set p1.1p1.3 设置为输出模式lP1OUT = 0 x00; / p1.1p1.3 输出值清零lreturn(P1IN
19、& 0 x f 0 ) ;ll如果返回值为0 xf0 则 有按键按下吗?l以后直接调用这个函数,即可判断有否按键按下。南京航空航天大学电子中心&TI南航430联合实验室l使用延时再判断的方法即可消除抖动lIf(Keyj() != 0 xf0 )l l delay(200);/延时消除抖动l If(Keyj() = 0 xf0 )l exit;/没有按键 未抖动l else/确实有键按下l /处理l 南京航空航天大学电子中心&TI南航430联合实验室l测试方法:如果有按键按下则发光管亮lIf(Keyj() != 0 xf0 )l l delay(200);/延时消除抖动l If(Keyj() =
20、 0 xf0 )l exit;/没有按键 为抖动l else/确实有键按下l P1OUT = 1 ;/处理DELAY(10000);P1OUT = 0 ;l 南京航空航天大学电子中心&TI南航430联合实验室l方法为:一个一个地查找。l先第一行输出0,检查列线是否非全高l否则第二行输出0,检查列线是否非全高l否则第三行输出0,检查列线是否非全高l如果某行输出0时,查到列线非全高,则该行有按键按下。l根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。l下页具体程序。南京航空航天大学电子中心&TI南航430联合实验室lvoid check_Key(void)l unsigne
21、d char row ,col,tmp1,tmp2;l / tmp1用来设置P1OUT的值,使P1.1P1.3中有一个为0l tmp1 = 0 x08;l for(row=0;row3;row+)l P1OUT |= 0 x0E; / p1.1P1.3=1l P1OUT -= tmp1; / P1.1p1.3中有一个为0l tmp1 = tmp1/2; / tmp1 右移一位l if (P1IN & 0 xf0) 0 xf0) / 是否P1IN的P1.4P1.7中有一位为0l tmp2 = 0 x80; / tmp2用于检测出那一位为0l for(col =0;col0 x04;col+) /
22、 列检测l if(P1IN & tmp2)=0 x00) / 是否是该列l key_val =key_Map row*4 +col ; / 获取键值l return; / 退出循环l l tmp2 /= 2; / tmp2右移l l l l南京航空航天大学电子中心&TI南航430联合实验室l键盘程序过程:l判断按键l消除抖动l判断位置l等待松开lvoid key(void)If(Keyj() != 0 xf0 )l l delay(200); /延时消抖l If(Keyj() != 0 xf0 ) /确实按下l check_Key();lWait: if(Keyj() = = 0 xf0 )l
23、 goto wait ; /等待松开l南京航空航天大学电子中心&TI南航430联合实验室南京航空航天大学电子中心&TI南航430联合实验室l要求: (2、3同学讨论设计)l时间可以调整l控制点5个l可以键盘输入l控制时间到,发光管亮l可以输入每个控制点的发光管亮的时间520秒南京航空航天大学电子中心&TI南航430联合实验室l要求:(键盘与液晶)(2、3同学讨论设计)l被操作数2位,结果4位l运算: /l操作规则:l1、输入两个数字为第一操作数l2、输入运算:1、2、3、4l /l3、输入两个数字为第二操作数l4、为取消l5、为回车运算(等号)南京航空航天大学电子中心&TI南航430联合实验室
24、lMSP430内含12路12位200KPS的ADC:l模拟输入端为P6,将P6设置为第二功能则为ADC12;lA10为内部温度传感器;南京航空航天大学电子中心&TI南航430联合实验室南京航空航天大学电子中心&TI南航430联合实验室l首先设置ADC12:lADC12CTL0 = ADC12ON + REFON + REF2_5V + SHT0_6;/ 设置ADC12 的内部参考电压2.5伏 l然后可以转换:lADC12CTL0 |= ENC; / 使能转换 l启动转换:lADC12CTL0 |= ADC12SC;l读取结果:lresult = ADC12MEM0;l 南京航空航天大学电子中心
25、&TI南航430联合实验室l使用片内温度传感器l使用LED作为控制输出的模拟l设置4个温度值:大火加热停止温度点T1、中加热停止温度点T2、小火加热停止温度点T3l 温度: T1 T2 T3 l大火 中火 小火 停止加热l加热器使用LED的亮度表示。南京航空航天大学电子中心&TI南航430联合实验室l1、可编程时间控制器l2、复杂计算器设计l3、环境温度监测l4、小规模LED点阵显示屏(4、5汉字)l5、温度控制系统l6、数据采集系统l7、汉字液晶显示l8、数字万用表l9、数字稳压直流电源l10、数字信号发生器l11、机械臂控制l12、无线数据采集与无线控制l13、电子称设计 WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer P5DIR |= 0 x02; / Set P5.1 to output direction P5DIR &= 0 x0f; / Set P5.1 to output direction for (;) unsigned int i; P5OUT = 0 x02; i = 50000; / Delay do (i-); while (i != 0);