1、MSP430x14x系列单片机程序实例目录1、4KEY-独立按键测试程序 22、4X4KEY-矩阵键盘测试程序 53、ADC-IN0-ADC0显示数字量测试程序 94、ADC-IN0-Continue-ADC连续转换模式测试程序 135、ADC-IN0-Voltage-数码管显示ADC电压大小测试程序 176、DAC5615-DAC直接控制测试程序 207、DAC5615-SPI-DAC通过SPI接口控制测试程序 228、DISPLAY-LED-数码管显示测试程序 259、DS18B20-DS18B20采集温度测试程序 2710、DS1302-12864在12864液晶中显示测试程序 3211
2、、DS1302-DS1302实时时钟在1602液晶中显示测试程序 4012、INFRARED-遥控器红外一体化解码测试程序 4713、INTKEY-中断键盘测试程序 5214、LCD1602-1602液晶显示测试程序 5515、LCD12864-12864液晶显示字符汉字测试程序 5916、LED8-LED发光二极管闪烁测试程序 6317、LED-turn-LED流水显示测试程序 6318、MADA-步进电机驱动测试程序 6519、RS485-RS485通信测试程序 6620、SOUND-蜂鸣器发声测试程序 6921、SOUND-无源蜂鸣器发声测试程序 7022、TIMERA-99S-定时器9
3、9秒计时测试程序 7123、TIMERA-CONTINUE-定时器连续计数模式测试程序 7424、TIMERA-PWM1-定时器PWM输出测试程序 761、4KEY-独立按键测试程序/*/DM430-A型开发板独立键盘控制程序,通过数码管显示按键值,采用逐键扫描/独立键盘接在P14P17口,键值定义为14,初始默认显示0*/#include #include Config.h /开发板配置头文件,主要配置IO端口信息/*/ MSP430IO口初始化/*void Port_Init() LED8SEL = 0x00; /设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; /设置
4、IO口方向为输出 LED8PORT = 0xFF; /P2口初始设置为FF DATASEL = 0x00; /设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; /设置IO口方向为输出 DATAPORT = 0xFF; /P4口初始设置为FF CTRSEL = 0x00; /设置IO口为普通I/O模式,此句可省 CTRDIR |= BIT3 + BIT4; /设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; /P6口初始设置为FF KEYSEL = 0x00; /设置IO口为普通I/O模式,此句可省 KEYDIR = 0x0F; /高四位输入模式,
5、低四位输出模式,外部上拉电阻 KEYPORT= 0xF0; /初始值0xF0/*/ 74HC573控制数码管动态扫描键值显示函数/*void Display_Key(uchar num)uchar i,j; j=0x01; /此数据用来控制位选for(i=0;i8;i+) DCTR1; /控制数码管段数据的74HC573的LE管脚置高 WCTR1; /控制数码管位的74HC573的LE管脚置高 DATAPORT=j; /设置要显示的位,也就是哪一个数码管亮 WCTR0; /锁存位数据,下面送上段数据以后,就显示出来了 DATAPORT=tablenum; /送要显示的数据,这里是键值 DCTR
6、0; /锁存段数据,数码管亮一个时间片刻 j=j1; /移位,准备进行下一位的显示 delay_us(500); /显示一个时间片刻,会影响亮度和闪烁性 Close_LED(); /显示完8个数码管后关闭数码管显示,否则可能导致各个数码管亮度不一致/*/ 键盘扫描子程序,采用逐键扫描的方式/*uchar Key_Scan(void) uchar key_check;uchar key_checkin; key_checkin=KEYIN; /读取IO口状态,判断是否有键按下 key_checkin&= 0xF0; /屏蔽掉低四位的不确定值if(key_checkin!=0xF0) /IO口值发
7、生变化则表示有键按下 delay_ms(20); /键盘消抖,延时20MS key_checkin=KEYIN; /再次读取IO口状态if(key_checkin!=0xF0) /确定是否真正的有键按下 key_check=KEYIN; /有键按下,读取端口值 switch (key_check & 0xF0) /判断是哪个键按下 case 0xE0:key=1;break;case 0xD0:key=2;break;case 0xB0:key=3;break;case 0x70:key=4;break; else key=0xFF; /无键按下,返回FF return key;/*/ 主程序
8、/*void main(void) uint key_store=0x00; /没有按键按下时,默认显示1 WDT_Init(); /看门狗初始化 Clock_Init(); /时钟初始化 Port_Init(); /端口初始化,用于控制IO口输入或输出 Close_LED(); delay_ms(100); /延时100mswhile(1) Key_Scan(); /键盘扫描,看是否有按键按下if(key!=0xff) /如果有按键按下,则显示该按键键值14 switch(key) case 1: Display_Key(0x01);key_store=0x01;break; /根据键值显示
9、到数码管上case 2: Display_Key(0x02);key_store=0x02;break; case 3: Display_Key(0x03);key_store=0x03;break;case 4: Display_Key(0x04);key_store=0x04;break; else Display_Key(key_store); /没有按键的时候显示上次的键值 2、4X4KEY-矩阵键盘测试程序/*/DM430-A型开发板矩阵键盘控制程序,通过数码管显示按键值,采用逐行扫描/4X4键盘接在P1口,通过控制IO口状态变化,逐行扫描按键是否按下*/#include #incl
10、ude Config.h /开发板配置头文件,主要配置IO端口信息/*/ MSP430IO口初始化/*void Port_Init() LED8SEL = 0x00; /设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; /设置IO口方向为输出 LED8PORT = 0xFF; /P2口初始设置为FF DATASEL = 0x00; /设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; /设置IO口方向为输出 DATAPORT = 0xFF; /P4口初始设置为FF CTRSEL = 0x00; /设置IO口为普通I/O模式,此句可省 CTRDIR |= B
11、IT3 + BIT4; /设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; /P6口初始设置为FF KEYSEL = 0x00; /设置IO口为普通I/O模式,此句可省 KEYDIR = 0x0F; /高四位输入模式,低四位输出模式,外部上拉电阻 KEYPORT= 0xF0; /初始值0xF0/*/ 74HC573控制数码管动态扫描键值显示函数/*void Display_Key(uchar num)uchar i,j; j=0x01; /此数据用来控制位选for(i=0;i8;i+) DCTR1; /控制数码管段数据的74HC573的LE管脚置高 WCTR1; /
12、控制数码管位的74HC573的LE管脚置高 DATAPORT=j; /设置要显示的位,也就是哪一个数码管亮 WCTR0; /锁存位数据,下面送上段数据以后,就显示出来了 DATAPORT=tablenum; /送要显示的数据,这里是键值 DCTR0; /锁存段数据,数码管亮一个时间片刻 j=j1; /移位,准备进行下一位的显示 delay_us(500); /显示一个时间片刻,会影响亮度和闪烁性 Close_LED(); /显示完8个数码管后关闭数码管显示,否则可能导致各个数码管亮度不一致/*/ 键盘扫描子程序,采用逐行(列)扫描的方式/*uchar Key_Scan(void) uchar
13、statevalue,key_checkin,key_check; KEYPORT=0xf0; /在IO口由输出方式变为输入方式时要延迟一个周期 KEYPORT=0xf0; /采取写两次的方法延时 key_checkin=KEYIN; /读取IO口状态,判断是否有键按下if(key_checkin!=0xf0) /IO口值发生变化则表示有键按下 delay_ms(20); /键盘消抖,延时20MS key_checkin=KEYIN;if(key_checkin!=0xf0) KEYPORT=0xfe; /逐行扫描开始 KEYPORT=0xfe; /写两次延时,下同 key_check=KEY
14、IN; switch (key_check) /根据读到的IO口值判断按键的按下情况 case 0xee:key=15;break;case 0xde:key=11;break;case 0xbe:key=8;break;case 0x7e:key=4;break; KEYPORT=0xfd; KEYPORT=0xfd; key_check=KEYIN;switch (key_check) case 0xed:key=14;break;case 0xdd:key=10;break;case 0xbd:key=7;break;case 0x7d:key=3;break; KEYPORT=0xfb
15、; KEYPORT=0xfb; key_check=KEYIN;switch (key_check) case 0xeb:key=13;break;case 0xdb:key=0;break;case 0xbb:key=6;break;case 0x7b:key=2;break; KEYPORT=0xf7; KEYPORT=0xf7; key_check=KEYIN;switch (key_check) case 0xe7:key=12;break;case 0xd7:key=9;break;case 0xb7:key=5;break;case 0x77:key=1;break; else s
16、tatevalue=0xff; /无按键时返回值key=statevalue;return(key); return(key);/*/ 主程序/*void main(void) uint key_store=0x01; /没有按键按下时,默认显示1 WDT_Init(); /看门狗初始化 Clock_Init(); /时钟初始化 Port_Init(); /端口初始化,用于控制IO口输入或输出 Close_LED();while(1) Key_Scan(); /键盘扫描,看是否有按键按下if(key!=0xff) /如果有按键按下,则显示该按键键值015 switch(key) case 1:
17、 Display_Key(0x01);key_store=0x01;break; /根据键值显示到数码管上case 2: Display_Key(0x02);key_store=0x02;break; case 3: Display_Key(0x03);key_store=0x03;break;case 4: Display_Key(0x04);key_store=0x04;break; case 5: Display_Key(0x05);key_store=0x05;break;case 6: Display_Key(0x06);key_store=0x06;break;case 7: Di
18、splay_Key(0x07);key_store=0x07;break;case 8: Display_Key(0x08);key_store=0x08;break;case 9: Display_Key(0x09);key_store=0x09;break; case 0: Display_Key(0x00);key_store=0x00;break;case 10: Display_Key(0x0a);key_store=0x0a;break; case 11: Display_Key(0x0b);key_store=0x0b;break; case 12: Display_Key(0x
19、0c);key_store=0x0c;break; case 13: Display_Key(0x0d);key_store=0x0d;break; case 14: Display_Key(0x0e);key_store=0x0e;break;case 15: Display_Key(0x0f);key_store=0x0f;break; else Display_Key(key_store); /没有按键的时候显示上次的键值 3、ADC-IN0-ADC0显示数字量测试程序/*/DM430-A型开发板数码管显示ADC转换结果程序,显示输入到ADC的电压转换后的数字量/MSP430单片机内部1
20、2位ADC,采用内部2.5V基准,单通道单次转换,中断模式/通过调节ADC_IN0电位器,可以更改输入电压,最大显示量4095/数码管控制采用74HC573锁存器控制,采用动态显示机制,采用后四位数码管显示*/#include #include Config.h /开发板配置头文件,主要配置IO端口信息static uchar Flag=0; /标志变量uint TEMP=0; /ADC值暂存变量/*/ MSP430IO口初始化/*void Port_Init() LED8SEL = 0x00; /设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; /设置IO口方向为输出 L
21、ED8PORT = 0xFF; /P2口初始设置为FF DATASEL = 0x00; /设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; /设置IO口方向为输出 DATAPORT = 0xFF; /P4口初始设置为FF CTRSEL = 0x00; /设置IO口为普通I/O模式,此句可省 CTRDIR |= BIT3 + BIT4; /设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; /P6口初始设置为FF /*/ 74HC573控制数码管动态扫描显示函数,显示采集到的温度/*void Display(uint data_q,uint data
22、_b,uint data_s,uint data_g)uchar i,j; j=0x01; /此数据用来控制位选 for(i=0;i4;i+) /用后4位数码管来显示 DCTR1; WCTR1; DATAPORT=j; WCTR0; j=(j1); DATAPORT=0x00; /前4位都不显示,送数据00即可 DCTR0; delay_ms(2); DCTR1; /开始显示千位 WCTR1; DATAPORT=j; WCTR0; j=(j1); DATAPORT=tableA1; DCTR0; delay_ms(1); DCTR1; /开始显示百位 WCTR1; DATAPORT=j; WC
23、TR0; j=(j1); DATAPORT=tableA2; DCTR0; delay_ms(1); DCTR1; /开始显示十位 WCTR1; DATAPORT=j; WCTR0; j=(j1); DATAPORT=tableA3; DCTR0; delay_ms(1); DCTR1; /开始显示个位 WCTR1; DATAPORT=j; WCTR0; j=(j1); DATAPORT=tableA4; DCTR0; delay_ms(1); DCTR1; WCTR1; DATAPORT=0xff; WCTR0; /*/ 电压数据处理函数/*void Data_do(uint temp_d)uint
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2