完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
给你一个参考
/*****************MSP430F149与1602LCD模块程序***********************/ /**************************Pins defination***************************/ /* RS P4.4 寄存器选择信号 H-数据寄存器 L-指令寄存器 */ /* RW P4.5 读写信号 H-读 L-写 */ /* E P4.6 片选信号 下降沿触发 */ /* DB0-DB7 P5.0-P5.7 数据线 数据传输 */ /**************************over*************************************/ #include "msp430x14x.h" #include "stdio.h" #define uchar unsigned char #define uint unsigned int uchar dis1[]="ShangYu"; uchar dis2[]=" AnNa"; void int_clk() { uchar i; BCSCTL1&=~XT2OFF; //打开XT振荡器 BCSCTL2|=SELM1+SELS; //MCLK为8MHz,SMCLK为8MHz do { IFG1&=~OFIFG; //清除振荡错误标志 for(i=0;i<100;i++) _NOP(); //延时等待 } while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待 IFG1&=~OFIFG; } void delay(int j) { int i; while(j--) { for(i = 0; i< 2000; i++) { _NOP(); _NOP(); _NOP(); _NOP(); } } } /******************* 检查LCD忙状态 *********************/ /************* lcd_busy为1时,忙,等待 *****************/ /************* lcd-busy为0时,闲,可写指令与数据 *********/ int lcd_busy() { int busy; P5DIR=0x00; P4OUT &=~ BIT4 ; // RS = 0 P4OUT |= BIT5 ; // RW = 1 P4OUT |= BIT6 ; // EN = 1 _NOP(); busy =P5IN&0x80; _NOP(); P4OUT &=~ BIT6 ; // EN = 0 P4OUT &=~ BIT5 ; // RW = 0 P4OUT |= BIT4 ; // RS = 1 P5DIR=0XFF; return busy; } //写指令数据到LCD RS=L,RW=L,E=高脉冲,D0-D7=指令码。 void lcd_wcmd(uchar cmd) { while(lcd_busy()); P4OUT &=~ (BIT4 + BIT5) ; // RS = 0 RW = 0 P5OUT = cmd; _NOP(); P4OUT |= BIT6 ; // E = 1 _NOP(); P4OUT &=~ BIT6 ; } //写显示数据到LCD RS=H,RW=L,E=高脉冲,D0-D7=数据。 void lcd_wdat(uchar dat) { while(lcd_busy()); P4OUT |= BIT4 ; // RS = 1 P4OUT &=~ (BIT5 + BIT6) ; // RW = 0 E = 0 P5OUT = dat; _NOP(); P4OUT |= BIT6 ; // E = 1 _NOP(); P4OUT &=~ BIT6 ; // E = 0 } void lcd_pos(uchar pos) { lcd_wcmd(pos|0x80); //数据指针=80+地址变量 } void lcd_clr() { lcd_wcmd(0x01); //清除LCD的显示内容 delay(1); } void lcd_init() { delay(10); //等待LCD电源稳定 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay(1); lcd_wcmd(0x38); delay(50); lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); //显示开,关光标 delay(1); lcd_wcmd(0x06); //移动光标 delay(1); lcd_wcmd(0x01); //清除LCD的显示内容 delay(1); } int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; int_clk(); P4DIR |= BIT4 + BIT5 + BIT6 ; while(1) { int i; lcd_init(); lcd_pos(0x00); for(i=0;i<7;i++) {lcd_wdat(dis1[i]); delay(100); } lcd_pos(0x40); for(i=0;i<11;i++) {lcd_wdat(dis2[i]); delay(100); } delay(1000); } } |
|
|
|
只有小组成员才能发言,加入小组>>
3035个成员聚集在这个小组
加入小组2928 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3604 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2343 浏览 1 评论
4806 浏览 1 评论
2573 浏览 1 评论
1330浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3605浏览 2评论
2930浏览 1评论
1517浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 04:15 , Processed in 1.284916 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号