PROTEUS仿真1602基于MSP430F249
MSP430f149驱动LCD1602

/*************************************************MSP430f1602写的1602液晶显示程序** 2012-08-24 19:11 **硬件连接:P2 数据口P6.3--RS P6.4--RW P6.5--E *************************************************/#include"msp430x14x.h"#include"msp430x14x.h"#define uint unsigned int#define rw(x) P3OUT=(P3OUT&(~BIT6))|(x?BIT6:0);unsigned char table0[]="diansai 2010-7";unsigned char table1[]="liudaquan";//**************延时***********************************void delay(uint z){uint t,y;for(t=z;t>0;t--)for(y=110;y>0;y--);}//*******写命令*****************************************void write_com(unsigned char com){P3OUT&=~BIT5;//作为RS选择端低电平有效rw(0);P4OUT=com;delay(5);P3OUT|=BIT7;//delay(5);P3OUT&=~BIT7;}//*******写数据*************************************************** void write_data(unsigned char date){P3OUT|=BIT5;//作为RS选择端高电平有效劳rw(0);P4OUT=date;delay(5);P3OUT|=BIT7;//作为E选择端=1;// delay(5);P3OUT&=~BIT7;}//********初始化******************************************void init(){P3DIR=0xff;//P3输出作控制口P3SEL=0;P3OUT=0x00;P3OUT&=~BIT7;//EP3OUT&=~BIT5;//RSP4DIR=0XFF;//P4输出作数据口P4SEL=0;P4OUT=0X00;write_com(0x38);//显示模式设置write_com(0x0c);//开显示,不显光标write_com(0x06);//数据地址指针write_com(0x01);//清屏_BIS_SR(GIE);//两个开总中断的方法随便用哪一个// _EINT();}//************显示函数2********************display2(unsigned char x,unsigned char *p){unsigned char y=0; //y要给其初值0否则出乱码write_com(x);while(p[y]!=0x00){write_data(p[y]);y++;delay(5);}}//***************主函数**************************************************** void main(){WDTCTL=WDTPW+WDTHOLD; //关看门狗init();display2(0x80+0x01,table0); display2(0x80+0x40+0x03,table1); }。
基于51单片机的1602液晶频率计设计(Proteus仿真图和程序)

基于51单片机的1602液晶频率计设计一、Proteus仿真图:二、程序代码//最大测量65536Hz的频率计//原理:T0定时1S,T1计数#include <REG51.H>#include<INTRINS.H>#define uchar unsigned char#define uint unsigned intuint count=0;uint nm=0;uchar Fw,Fq,Fb,Fs,Fg;#define DataPort P0sbit LCM_RS=P2^0;sbit LCM_RW=P2^1;sbit LCM_EN=P2^2;uchar code str0[]={"-Test frequency-"};uchar code str1[]={"F=00000Hz "};//uchar code str2[]={" "};/*******************************/void delay(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<121;j++){;}}}//=================================================///* 函数名:void WaitForEnable(void)作用:检测忙碌信号*///================================================//void WaitForEnable(void){DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();//while(DataPort&0x80);delay(5);LCM_EN=0;}//==========================================================// /* 函数名:void WriteCommandLCM(uchar CMD,uchar Attribc)作用:写命令到LCM *///==========================================================// void WriteCommandLCM(uchar CMD,uchar Attribc){if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///* 函数名:void WriteDataLCM(uchar dataW)作用:写数据*///=========================================================// void WriteDataLCM(uchar dataW){WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///* 函数名:void InitLcd()作用:LCM初始化*///=========================================================// void InitLcd(){WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCommandLCM(0x0c,1);}//=========================================================///*函数名:void DisplayOneChar(uchar X,uchar Y,uchar DData)作用:显示指定坐标的一个字符*///=========================================================// void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);}//============================================================// /*函数名:void DisplayListChar(uchar X,uchar Y,uchar code *DData作用:显示指定坐标的一串字符*///============================================================// void DisplayListChar(uchar X,uchar Y,uchar code *DData){uchar ListLength=0;Y&=0x1;X&=0xF;while(X<=15){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}//============================================================// /* 函数名:void main(void)作用:主函数*///============================================================////============================================================// /* 函数名:void display()作用:显示函数*///============================================================// void display(){Fw=count/10000+0x30;Fq=count/1000%10+0x30;Fb=count/100%10+0x30;Fs=count/10%10+0x30;Fg=count%10+0x30;DisplayOneChar(2,1,Fw);DisplayOneChar(3,1,Fq);DisplayOneChar(4,1,Fb);DisplayOneChar(5,1,Fs);DisplayOneChar(6,1,Fg);}void InitTime(void){TMOD=0x51;//T0为定时器工作于方式1,T1为计数器工作于方式1TH0=0x4C;//定时器50ms赋高8初值, 12M晶振TL0=0x00;//定时器50ms赋低8初值, 12M晶振TR0=1;//开定时器1TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值TR1=1;//开计数器0ET0=1;EA=1;}void timeo(void) interrupt 1{TH0=0x4C;//定时器50ms赋高8初值TL0=0x00;//定时器50ms赋低8初值nm=nm+1;if(nm==10){TR1=0; //关闭T1定时器,定时1S完成TR0=0;//关闭T0}}//============================================================// /* 函数名:void main(void)作用:主函数*///============================================================// void main(void){char i;uint temp,temp1;delay(500);InitLcd(); //LCM初始化设置InitTime();for(i=15;i>=0;i--){DisplayListChar(i,0,str0);//显示第一行字符DisplayListChar(i,1,str1);//显示第二行字符delay(100);}while(1){if(nm==10)//定时10*50MS=500ms{temp=TL1;temp1=TH1;count=2*(temp1*256+temp);//定时2乘以500ms=1000ms display();TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值nm=0;TR1=1;TR0=1;}}}。
proteus的msp430仿真,一学就会资料讲解

第一步:在IAR中编写430程序:
为了便于实现和理解,我的例子比较简单,程序将P3OUT中的数据传给P2IN,然后再把P2IN中的数据给P1OUT,最后输出到LED灯,程序如下:
#include <msp430x14x.h>
int main( void )
{
while(1);
}
第二步:将程序生成为hex文件
右键TEST2,如图1,点击Option
图1
选中左边栏中的Linker,然后点击右栏中的output,如图2
图2
勾中Output file下的”Override default”选项并将输出文件名后辍改为”.hex”.在Format选项框中选中Other,Output后选择”inter-extended”。其他的值保持默认,点击确定。
点击”make”,生成proteus中需要的“.hex”文件,该文件生成在Debug文件夹下的Exe中,如图3
图3
第三步:proteus中搭建好电路
图4
第四步:双击单片机导入生成的.hex程序,运行,就得到所要的结果
图5
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
P3DIR = 0xff;//P3设ห้องสมุดไป่ตู้为输出,P2设置为输入,P1设置为输出
P2DIR = 0x00;
P1DIR = 0xff;
P3OUT = 0x4a;//P3输出灯的控制信息,并通过连线传给P2IN
P1OUT = P2IN;//P2将信息给P1
基于MSP430上的流水灯设计

基于MSP430上的流水灯的实验设计申报者:队长 :队员:摘要: IAR Embedded Workbench IDE是MSP430开发环境,它包含了编辑器;编译器;连接器;调试器;硬件中断模拟器;下载C语言程序到MSP430应用系统。
因此,学习和使用IAR Embedded Workbench IDE是MSP430开发环境是进行MSP430开发必不可少的环节。
主要原理是通过430单片机产生信号,控制一定数量的LED产生不同规律的变换,通过不同的程序,产生不同的循环,从而达到不同的变换效果。
关键词:MSP 430 程序 LED 变换循环Abstract:IAR Embedded Workbench IDE MSP430 developmentenvironment, itcontainsthe editor; compiler; connector;debugger; hardwareinterrupt simulator; download Clanguage program in the MSP430 application system.Therefore, the learning and use of theIAR EmbeddedWorkbench IDE MSP430 development environment isMSP430 development of essential link. The main principle is to generate the signal by 430 single chip microcomputer, transform to control the amount of LED produced by different rules, different procedures,different cycle, so as to achievethe transformation effect of different.Keywords: MSP 430 program LED transform circle目录一 MSP430单片机的概述1.1MSP430系列单片机的基本信息......... ....... .31.2MSP430系列单片机与51系列单片机的比较.. .. .. . 4 二设计思路2.1设计平台.. .. .. .. .. .. .. .. .. .. .. .. .. . . .42.2设计思路.. .. .. .. .. .. .. .. .. .. .. .. .. .. .5 三电路设计3.1电路模块设计.. .. .. .. .. .. .. .. .. .. .. .. .. .6 3.1.1 晶振电路模块.. .. .. .. .. .. .. .. .. .. .. .. .. .6 3.1.2 复位电路模块.. .. .. .. .. .. .. .. .. .. .. .. .. .6 3.1.3 数码管显示模块.. .. .. .. .. .. .. .. .. .. .. 6 3.1.4 功能模式选择模块.. .. .. .. .. .. .. .. .. .. .. .63.1.5 LED流水灯模块.. .. .. .. .. .. .. .. .. .. .. ..63.2 实验电路设计. . .. .. ... .. .. .. .. .. .6 7 8 9四程序调试及实验结果展示.. . .. .. .. .. .. .. ..10 11五实验总结.. .. . .. .. .. .. .. .. .. .. .. .. .11 12六参考文献.. .. . .. .. .. .. .. .. .. .. .. .. .. ..12附录一.. .. .. .. .. .. .. .. .. .. .. .. .. .. ..12 13 14附录二.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..141. MSP430单片机的概述1.1 MSP430系列单片机的基本信息图1 MSP430内部原理框图在运算速度方面,MSP430系列单片机能在8MHz晶体的驱动下,实现125us的指令周期。
在proteus中仿真MSP430单片机的设置方法

要使用PROTEUS仿真MSP430单片机,首先要用IAR生成hex文件
在有些场合需要生成.hex文件,因此,这单介绍在IAR中如何生成.hex文件。
生成方法:
在Options窗口的日录Category中选择第六项Linker。
在Output选项中,选中Format复选框的Other,然后在Output下拉菜单中选择msd-i,如图5.1所示。
注意:在选择了Format复选框的Other后,在C-SPY调试器下的。
Debug information for C-SPY的调试信息不可用,在这里只生成了.hex的输出文件。
在Output下选择msd-i还会生成第二输出文件.sym文件,如果需要生成其它输出文件,则可以选择Output下的其它选项。
其选项内容的解释可以参见“C:\ Program Files\IAR Systems\Embedded Workbench 4.0Kickstart\common\doc”下的xlink.ENU.pdf文档。
生成结果
生成的.hex文件在工程的Debug\Exe下,如图5.2所示
这样加载到PROTEUS里就可以了。
基于proteus仿真1602液晶电子时钟(附1602字符液晶详细资料)

基于proteus仿真1602液晶电⼦时钟(附1602字符液晶详细资料)基于proteus仿真1602液晶电⼦时钟(附1602字符液晶详细资料)#include#define uint unsigned int#define uchar unsigned charuchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a};sbit rs=P2^0;sbit rw=P2^1;sbit e=P2^2;uchar hshi,hge, mshi,mge,shi, ge,num,num1,num2,aa;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void lcd_com(uchar com) {rs=0;rw=0;P1=com;delay(1);e=1;e=0;}void lcd_dat(uchar dat) {rs=1;rw=0;P1=dat;delay(1);e=1;e=0;}void init(){lcd_com(0x38);delay(1);lcd_com(0x0c);delay(1);lcd_com(0x01);delay(1);TMOD=0X01;TH1=(65536-50000)/256; TL1=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void display(uchar hshi,uchar hge,uchar mshi,uchar mge,uchar shi,uchar ge) {lcd_com(0x80);lcd_dat(table[hshi]);lcd_com(0x81);lcd_dat(table[hge]);lcd_com(0x82);lcd_dat(table[10]);lcd_com(0x83);lcd_dat(table[mshi]);lcd_com(0x84);lcd_dat(table[mge]); lcd_com(0x85);lcd_dat(table[10]); lcd_com(0x86);lcd_dat(table[shi]); lcd_com(0x87);lcd_dat(table[ge]); }void main(){init();while(1){if(aa==20){aa=0;num++;num2=3;num1=34;if(num==60){num=0;num1++;if(num1==60){num1=0;num2++;if(num==24) {num2=0;}}}hshi=num2/10; hge=num2%10; mshi=num1/10;mge=num1%10;shi=num/10;ge=num%10;}display(hshi,hge,mshi,mge,shi,ge);}}void timer0() interrupt 1{TH0=(65536-50000)/256;TH0=(65536-50000)/256;aa++;}所谓1602是指显⽰的内容为16*2,即可以显⽰两⾏,每⾏16个字符。
MSP430F249仿真16x16点阵
MSP430F249单片机,仿真16*16点阵显示1、硬件说明:按照常规的接法:列信号c0~c15低电平有效,行信号r0~r15高电平有效。
列信号接74HC154,即4线-16线译码器,输入接P4的低4位,输出低电平有效。
行信号通过两个直通的锁存器74HC373接入,P1口对应接r0~r7 ,P3口对应接r8~r15。
接好后将点阵整体向右旋转90°2、取字模。
注意选择取模顺序:BADC。
如图所示:#include "msp430x24x.h"#define uchar unsigned char#define uint unsigned intuchar zimo[][32]={0x00,0x10,0xFC,0x11,0x04,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x24,0x24,0xFE,0x27, 0x20,0x24,0x20,0x44,0x20,0x28,0x20,0x10,0x20,0x28,0x20,0x44,0xA0,0x84,0x40,0x00, // 好0x04,0x02,0x7E,0x3F,0x44,0x22,0x44,0x22,0x44,0x22,0x7C,0x3E,0x44,0x22,0x44,0x22, 0x44,0x22,0x7C,0x3E,0x44,0x22,0x44,0x22,0x44,0x22,0x84,0x4A,0x94,0x44,0x08,0x81, // 朋0x00,0x04,0x00,0x04,0x04,0x04,0xFE,0xFF,0x00,0x04,0x00,0x04,0xF0,0x0F,0x10,0x08, 0x20,0x14,0x20,0x12,0x40,0x21,0x80,0x40,0x40,0x81,0x30,0x06,0x0E,0x18,0x04,0x60 // 友};void delay(uint x){ uchar i;for(;x>0;x--)for(i=30;i>0;i--);}void main( void ){uchar i,k,n;P1DIR= 0xff;P3DIR=0xff;P4DIR=0xff;// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;while(1){for(k=0;k<3;k++) // 3个字for(n=0;n<50;n++) // 每个字显示时长for(i=0;i<=15;i++) // 1帧图像的显示{P4OUT=i; //接列信号,低电平有效P1OUT=zimo[k][2*i]; //行信号低8位,高电平有效P3OUT=zimo[k][2*i+1]; //行信号高8位,高电平有效delay(10);}}。
1602液晶应用proteus仿真+源程序
uchar num; sbit lcden=P3^4; //液晶使能端
sbit lcdrs=P3^5; //液晶数据命令选择端 选择写数据还是写命令
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
} void write_com(uchar com)
} void init() { lcden=0; write_com(0x38); //设置 16x2 显示 5x7 点阵,8 位数据接口 write_com(0x0c); //设置开始显示 不显示光标 write_com(0x06); //写一个字符后地址指针加 1 write_com(0x01); //显示清零 数据指针清零 } void main() {
init(); write_com(0x80+0x10); //将数据指针第一行第一个字处, for(num=0;num<13;num++) { write_data(table[num]); delay(5); }
write_com(0x80+0x50); //定义指针位置 for(num=0;num<12;num++)
//写入
{
lcdrs=0; //LCD 选择输入命令
P0=com;
//向 P0 口输入命令
delay(5); lcden=1;
//延时 //打开 LCD 使能
delay(5); lcden=0;
//一个高脉冲 //关闭 LCD 使能
}
void write_data(uchar date)
{
protues7.6 仿真430单片机的步骤!
仿真430单片机!第一步:PROTUES软件安装!7.6的版本哦!第二部:IAR软件设置1:在workspace右击DUBGE选择Option选择芯片,这里选择MSP430F22742在LINK中添加这段文件-Ointel-standard,(CODE)=.hex-Oraw-binary,(CODE)=.bin-Ointel-standard,(XDATA)=.eep.hex-Oraw-binary,(XDATA)=.eep.bin3,dubgger中选择软件仿真第三步:写程序#include<msp430X22x4.h>#define uchar unsigned charuchar table[]={"one for all"};uchar table1[]={"all for one"};#define LCDRW_out_low P4OUT &=~BIT1 // 置0 #define LCDRW_out_high P4OUT |= BIT1 // 置1 #define LCDRS_out_low P4OUT &=~BIT0#define LCDRS_out_high P4OUT |= BIT0#define LCDE_out_low P4OUT &=~BIT2#define LCDE_out_high P4OUT |= BIT2void delay(int m){int t,y;for(t=m;t>0;t--)for(y=110;y>0;y--);}/********************************************1602写指令子程序,主要学会看时序操作图!!看图写程序指令********************************************/void write_cmd(uchar cmd){LCDRS_out_low; //当写数据时,RS得拉低LCDRW_out_low; //该命令设写状态P3OUT=cmd;LCDE_out_high; //开势能端EN进行数据写入操作delay(5);LCDE_out_low;}/********************************************1602写数据子程序,主要学会看时序操作图!!看图写程序指令********************************************/void write_date(uchar date){LCDRS_out_high; //当写数据时,RS得拉高LCDRW_out_low; //该命令设写状态P3OUT=date;LCDE_out_high; //开势能端EN进行数据写入操作delay(5);LCDE_out_low;}void init(){P3DIR |= 0xFF;P4DIR |= 0X07;P3OUT = 0X00;P4OUT = 0X00;/*1602初始化*/write_cmd(0x38); //显示模式设置write_cmd(0x0F); //显示及光标设置write_cmd(0x01); //清屏操作write_cmd(0x80); //显示字符位置设置}第四步:在PROTUES里面添加HEX文件!在你程序存放的地方有:在Debug/Exe文件夹里找到”.HEX”的文件就OK了!成果展示:void main(void){unsigned int i;init();delay(10);WDTCTL = WDTPW + WDTHOLD;for(i=0;i<11;i++) //写第一行字符{write_date(table[i]);delay(40);}delay(100);write_cmd(0x80+0x40);for(i=0;i<11;i++) //写第一行字符{write_date(table1[i]);delay(40);}while(1);}。
基于msp430g2553的1602四线驱动C源码
/*--------------------------------------------------------------*/基于msp430G2553de LCD1602四线驱动由于G2系列的IO口过于少,所以我们采用了四线驱动LCD1602的方法程序附后①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
③液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH 时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理。
字符的显示用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。