首先,这次实验设计中我们实现的是在LCD1602上进行的字符滚动,用的单片机是MSP430G2553,跑的软件是CCS。是一个非常简单的程序设计,但是我C语言和单片机这部分都学得很差哈哈,放上来给大家参考参考,同时鼓舞一下大家的信心。
软件程序部分
该程序主要由主程序源程序main.c、子程序源程序LCD.c和子程序头文件LCD.h构成。采用这种程序结构,使程序更加清晰,一目了然,减少程序错误的机会,增强了程序的可移植性。在程序设计中MSP430G2553中P1口作为并行数据输出端,P2.0、P2.1、P2.2分别作为LCD1602液晶的RS、RW、E端。
1)主函数main.c
#include #include "LCD.h" #define uint unsigned int #define uchar unsigned char void main(void) { WDTCTL = WDTPW | WDTHOLD; P1DIR=0xff; P2DIR=0xff; uchar *table0="Lanzhou "; uchar *table1="University "; while(1) { Display(table0,table1); Delay_1s(); Cycling(table0,table1); } } 2)子函数LCD.c #include #include"LCD.h" #define uint unsigned int #define uchar unsigned char //延时1ms程序 void Delay_1ms(void) { uchar i,j; for(i=0;i<10;i++) { for(j=0;j<20;j++); } } //延时1s程序 void Delay_1s(void) { int i,j; for(i=0;i<100;i++) { for(j=0;j<1000;j++); } } //液晶显示程序 void Display(uchar *table0,uchar *table1) { uchar i,j;//定义计数值 Reset();//初始化 Instruction(0x80);//写指令 for(i=0;i<16;i++)//发送数据第一行 { DataWrite(table0[i]); } Instruction(0xc0); for(j=0;j<16;j++)//发送数据第二行 { DataWrite(table1[j]); } } //循环显示程序 void Cycling(uchar *table0,uchar *table1) { int m,n; //当一次循环完成时,跳回到初始状态 for (n=0;n<17;n++) { if (n==16) { uchar *table0="Lanzhou "; uchar *table1="University "; } else { for(m=1;m<16;m++) { table0[m-1]=table0[m]; table1[m-1]=table1[m]; table0[15]=" "; table1[15]=" "; }//移位循环程序 } } } //查询忙碌标志信号程序 void Busy(void) { do { CLR_EN; SET_RW; CLR_RS; SET_EN; busy=dat; CLR_EN; Delay_1ms(); } while(busy&&0x80==1); } //写指令到LCM程序 void Instruction(uchar a) { Busy(); CLR_EN; CLR_RW; CLR_RS; SET_EN; dat=a; CLR_EN; } //写数据到LCM程序 void DataWrite(uchar a) { Busy(); CLR_EN; CLR_RW; SET_RS; SET_EN; P1OUT=a; CLR_EN; } //启动LCM程序 void Reset(void) { Instruction(0x38); Instruction(0x0c); Instruction(0x06); } 3)子函数头文件LCD.h #define uchar unsigned char #define dat P1OUT #define CLR_RS P2OUT&=~BIT0;//RS=P2.0 #define SET_RS P2OUT|=BIT0; #define CLR_RW P2OUT&=~BIT1;//RW=P2.1 #define SET_RW P2OUT|=BIT1; #define CLR_EN P2OUT&=~BIT2;//EN=P2.2 #define SET_EN P2OUT|=BIT2; uchar busy; void Delay_1ms(void);//延时程序 void Delay_1s(void);//延时程序 void Display(uchar* table0,uchar* table1);//显示程序 void Cycling(uchar *table0,uchar *table1);//循环程序 void Busy(void);//液晶查忙程序 void DataWrite(uchar a);//液晶写数据程序 void Reset(void);//液晶初始化 void Instruction(uchar a);//液晶写指令程序 硬件部分: 我画的图,大家按这张图连应该没问题的嗷,嘿嘿。
上一篇:MSP430 LCD控制器解释
下一篇:快速入门msp430fr6989之软件安装篇
推荐阅读最新更新时间:2024-11-06 10:32
设计资源 培训 开发板 精华推荐
- LT1940L 低纹波、薄型 5V 至 3.3V/2.4A 降压型稳压器的典型应用电路
- NSV50350AST3G 恒流 LED 灯串驱动器的典型应用
- 使用具有 B 类 EMI 滤波(单输出)的 RP10-2415SA DC/DC 转换器的典型应用
- 使用 ON Semiconductor 的 CS8271 的参考设计
- EVAL-AD5629RSDZ,用于评估 AD5629R 八通道、16 位密集 DAC 的评估板
- EVAL-ADE7878AEBZ,ADE7878A电能计量IC评估板
- 使用 Microchip Technology 的 LX7172A 的参考设计
- 电创桌垫
- 使用 MikroElektronika 的 IAM-20680 的参考设计
- lm2596
- TTI Asia 2016慕尼黑上海电子展关注有礼活动
- 免费申请TI 样片,晒单赢好礼!
- 下资料赢京东卡|泰克“软硬”兼施 打造超值示波器
- 畅游安富利人工智能云会展,挑战60天打卡学习养成记!冲击华为Mate40 Pro、Apple iPad Air等豪礼啦!
- EE大学堂新年游戏之\\
- 一大波MCU开发板正在靠近,速来——瑞萨电子设计大赛(2015)
- 【问题征集】大学生美国TI行,你问我送礼!
- 瑞萨电子MCU全国技术研讨会开放报名!覆盖上海、南京、杭州、合肥等10大城市!
- 【社区大讲堂】ARM+DSP双核处理器应用程序开发
- Littelfuse第2期 | 符合AEC-Q200 车规的保险丝/熔断器