历史上的今天
今天是:2025年06月20日(星期五)
2020年06月20日 | 课程作业记录6:MSP430G2553+LCD1602字符滚动
2020-06-20 来源:eefocus
首先,这次实验设计中我们实现的是在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);//液晶写指令程序 硬件部分: 我画的图,大家按这张图连应该没问题的嗷,嘿嘿。 
史海拾趣
|
中国是人口最多,经济成长最快速的发展中国家。许多经济学家预测,中国大陆的GDP可能在20年内赶上美国,中国品牌的产品将普遍出现在全球市场上。虽然外界对于中国未来的预测是令国人兴奋的,不过现实上中国企业的生产力与国际竞争力正陷入持续成长 ...… 查看全部问答> |
|
我按着周立功的书做的,例如: 1.在C:\\WINCE500\\PLATFORM\\SMDK2410\\SRC\\DRIVERS\\目录下创建SimpleDriver目录; 2.C:\\WINCE500\\PLATFORM\\SMDK2410\\SRC\\DRIVERS\\GPIO目录下复制makefile文件到SimpleDriver目录;(我没有找到GPIO目录, ...… 查看全部问答> |
|
大家好!我安好了PROTEL 99SE并升级了SP6,但为什么新建时打不开呢?弹出一个对话框:root has been delete!各位大虾,这是个么子情况呢?求教,谢谢啦! … 查看全部问答> |
|
降低模块间耦合,提高应用程序可靠性 另一个会严重降低应用程序可靠性的地方,就是模块间互相耦合,搅在一起。搅在一起的代码,就像一盘意大利面条,又杂又乱,如果代码写成这样的话,可靠性要高,上帝都会笑。 那么, ...… 查看全部问答> |
|
硬件为MSP430G2553,小弟大一,还没有数电和模电基础,硬学试试。 麻烦先看看要求: 1.AD 模块的使用 使用内部ADC 模块持续测量一个外部电压(0—2.5V ) 2.定时器模块的使用 用 1 中测量的电压值决定两个 LED 中一 ...… 查看全部问答> |




