历史上的今天
今天是:2025年02月15日(星期六)
2020年02月15日 | MSP4301602显示Ⅱ
2020-02-15 来源:eefocus
/********************************************************************
1602液晶显示
********************************************************************/
#include #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define P10 3 #define P11 6 #define P12 7 #define RS_CLR P3OUT &= ~(1 << P10) //RS置低 #define RS_SET P3OUT |= (1 << P10) //RS置高 #define RW_CLR P3OUT &= ~(1 << P11) //RW置低 #define RW_SET P3OUT |= (1 << P11) //RW置高 #define EN_CLR P3OUT &= ~(1 << P12) //E置低 #define EN_SET P3OUT |= (1 << P12) //E置高 #define DataPort P4OUT //P4口为数据口 #define KeyPort P1IN //独立键盘接在P14~P17 #define LED P2OUT //LED灯接在P2上 uchar key; uchar temp,keynum = 0; int shi=23,fen=59,miao=58; //************************************************************************* // 系统时钟初始化 //************************************************************************* void Clock_Init() { 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; } //************************************************************************* // MSP430内部看门狗初始化 //************************************************************************* void WDT_Init() { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 } //************************************************************************* // 初始化IO口子程序 //************************************************************************* void Port_init() { P1SEL = 0x00; //P2普通IO功能 P1DIR = 0x0F; //P24~P27输入模式,外部电路已接上拉电阻 P2SEL = 0x00; //P5口普通IO功能 P2DIR = 0xFF; // LED = 0X00; //P5口输出模式 P4SEL = 0x00; P4DIR = 0xFF; P3SEL = 0x00; P3DIR|= BIT3 + BIT6 + BIT7; //控制口设置为输出模式 } //*********************************************************************** // 显示屏命令写入函数 //*********************************************************************** void LCD_write_com(unsigned char com) { RS_CLR; RW_CLR; EN_SET; DataPort = com; //命令写入端口 delay_ms(5); EN_CLR; } //*********************************************************************** // 显示屏数据写入函数 //*********************************************************************** void LCD_write_data(unsigned char data) { RS_SET; RW_CLR; EN_SET; DataPort = data; //数据写入端口 delay_ms(5); EN_CLR; } //*********************************************************************** // 显示屏清空显示 //*********************************************************************** void LCD_clear(void) { LCD_write_com(0x01); //清屏幕显示 delay_ms(5); } //*********************************************************************** // 写入时分秒 //*********************************************************************** void LCD_write_sfm(uchar add,uchar dat) { uchar a,b; a = dat/10; b = dat%10; LCD_write_com(0xc0 + add); LCD_write_data(a+0x30); LCD_write_data(b+0x30); } //*********************************************************************** // 显示屏字符串写入函数 //*********************************************************************** void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_write_com(0x80 + x); //第一行显示 } else { LCD_write_com(0xC0 + x); //第二行显示 } while (*s) { LCD_write_data( *s); s ++; } } //*********************************************************************** // 显示屏单字符写入函数 //*********************************************************************** void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) { if (y == 0) { LCD_write_com(0x80 + x); //第一行显示 } else { LCD_write_com(0xC0 + x); //第二行显示 } LCD_write_data( data); } //*********************************************************************** // 显示屏初始化函数 //*********************************************************************** void LCD_init(void) { LCD_write_com(0x38); //显示模式设置 delay_ms(5); LCD_write_com(0x08); //显示关闭 delay_ms(5); LCD_write_com(0x01); //显示清屏 delay_ms(5); LCD_write_com(0x06); //显示光标移动设置 delay_ms(5); LCD_write_com(0x0C); //显示开及光标设置 delay_ms(5); } //*********************************************************************** // 时钟显示 //*********************************************************************** void clock(void) { miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; } LCD_write_sfm(2,shi); } LCD_write_sfm(5,fen); } LCD_write_sfm(8,miao); } //*********************************************************************** // 按键检测 //*********************************************************************** uchar Key_Scan(void) { uchar key_check; uchar key_checkin; key_checkin=KeyPort; //读取IO口状态,判断是否有键按下 key_checkin&= 0xF0; //读取IO口状态,判断是否有键按下 if(key_checkin!=0xF0) //IO口值发生变化则表示有键按下 { delay_ms(20); //键盘消抖,延时20MS key_checkin=KeyPort; if(key_checkin!=0xF1) { key_check=KeyPort; switch (key_check & 0xF0) { case 0xE0:key=1;break; case 0xD0:key=2;break; case 0xB0:key=3;break; case 0x70:key=4;break; } } } return key; } //*********************************************************************** // 主程序 //*********************************************************************** void main(void) { WDT_Init(); //看门狗设置 // Clock_Init(); //系统时钟设置 Port_init(); //系统初始化,设置IO口属性 delay_ms(100); //延时100ms LCD_init(); //液晶参数初始化设置 LCD_clear(); //清屏 LCD_write_com(0xc0+4); LCD_write_data(':'); LCD_write_com(0xc0+7); LCD_write_data(':'); LCD_write_sfm(2,shi); LCD_write_sfm(5,fen); LCD_write_sfm(8,miao); CCR0 = 32768; // TACTL = TASSEL_2 + MC_3; //+ MC1;
上一篇:MSP4301602显示Ⅰ
下一篇:MSP430 IIC通信
史海拾趣
|
当我在对一个电路进行仿真时总是出现这些错误,但我又不知道什么意思,请各位高手指点一下。 非常感谢! C3 Error: Pin order data (PINS=1:[]) not in READ ONLY field 4. Pins sorted by pin-name. C3 Error ...… 查看全部问答> |
|
从无铅、RoHS到无卤素,再到PoHS,业界对环保材料的“门槛”越设越高,未来的绿色之路将走向何处?今年10月15-16日高交会电子展期间,品牌研讨会\"IPCWorks Asia\"将再次在深圳举办,本届会议的主题是\"无铅/无卤素制造\",届时众多业内无卤技术专 ...… 查看全部问答> |
|
SqlCE PULL正常 SubmitSql也是正常的. 但是在 PUSH时出错. 请会的指点一下. 程序如下: string _strRemoteConnect = \"provider=sqloledb;data source=192.168.1.99;Initial Catalog=zls;User ID=sa;\"; SqlCeRe ...… 查看全部问答> |
|
_delay_ms()这个延时到底有多准啊? 如果用计数器TNCT0计数,TNCT0的初始值为55,跳到255后溢出中断, 选择8分频的时钟源,F_CPU= 16M,10ms的时间TNCT0的溢出次数应该是100次 即TNCT0跳了100*(255-55)= 20000次。 问: _ ...… 查看全部问答> |
|
要求输出电流高的的开关电路,集电极输入vcc为6.5v,按键基极输入5.22v。求高手详解一下电路,q1为ss8050,q2为2SC2500,我觉得这个电路构不成开关电路,我的理由是6.5>5.22是反偏,集电极反偏,发射极正便,求高手解决小弟的问题。更加纳闷的是 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 12:43 编辑 ECG 机的基本功能包括 ECG 波形显示(通过 LCD 显示屏或印刷纸媒质显示)、心跳律动指示以及通过按钮控制的简单用户界面。越来越多的 ECG 产品要求具备更多的功能,例如通过便携式媒体存储电子病历、 ...… 查看全部问答> |
|
芯片适用,nRF24L01无线数据传输电路,nRF24L01引脚说明及封装图。 资源连接: https://download.eeworld.com.cn/detail/lbk747/948… 查看全部问答> |




