完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
采用595可以节约端口,液晶用1602,包含一个c文件和三个h文件,c文件如下
#include "lcd1602.h" uchar num; void main() { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //主系统时钟切换为外部高速晶振 if (CALBC1_8MHZ == 0xFF || CALDCO_8MHZ == 0xFF) { while(1); // If calibration constants erased, trap CPU!! } // Configure Basic Clock BCSCTL1 = CALBC1_8MHZ; // Set range DCOCTL = CALDCO_8MHZ; // Set DCO step + modulation BCSCTL3 |= LFXT1S_2; // Set LFXT1 init_lcd(); delay(10); while(1) { display_string("hello everyone ",0x80); display_string(" this is chuang ",0xc0); } } h文件如下: #ifndef __LCD1602_H__ #define __LCD1602_H__ #include "yiwei595.h" #define lcden_out P2DIR|=BIT2 #define lcden_in P2DIR&=~BIT2 #define lcden_h P2OUT|=BIT2 #define lcden_l P2OUT&=~BIT2 #define rw_out P2DIR|=BIT1 #define rw_in P2DIR&=~BIT1 #define rw_h P2OUT|=BIT1 #define rw_l P2OUT&=~BIT1 #define rs_out P2DIR|=BIT0 #define rs_in P2DIR&=~BIT0 #define rs_h P2OUT|=BIT0 #define rs_l P2OUT&=~BIT0 void write_com(uchar com) { lcden_out; rs_out; rw_out; rs_l; rw_l; lcden_l; input_595(com); delay(1); lcden_h; delay(1); lcden_l; } void write_date(uchar date) { lcden_out; rs_out; rs_h; rw_l; lcden_l; input_595(date); delay(1); lcden_h; delay(1); lcden_l; } void display_string(uchar *p,uchar com) { uchar i; write_com(com); for(i=0;i<16;i++) { write_date(p[i]); } } void init_lcd() { lcden_out; lcden_l; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); display_string(" welcome ",0x80); display_string("san xia xue yuan",0xc0); } #endif #ifndef __YIWEI595_H__ #define __YIWEI595_H__ #include "msp430g2553.h" // 寄存器头文件包含 #include "delay.h" #define LCK_OUT P2DIR|=BIT3 #define LCK_IN P2DIR&=~BIT3 #define LCK_H P2OUT|=BIT3 #define LCK_L P2OUT&=~BIT3 #define SCK_OUT P2DIR|=BIT4 #define SCK_IN P2DIR&=~BIT4 #define SCK_H P2OUT|=BIT4 #define SCK_L P2OUT&=~BIT4 #define SDI_OUT P2DIR|=BIT5 #define SDI_IN P2DIR&=~BIT5 #define SDI_H P2OUT|=BIT5 #define SDI_L P2OUT&=~BIT5 //串行输入函数// void input_595(uchar duan) { uint i,j; SDI_OUT; SCK_OUT; LCK_OUT; LCK_L; // 锁存器端口产生一个上升沿,将数据输出 for(i=0;i<8;i++) { if(duan&0x80) SDI_H; else SDI_L; SCK_H; //产生一个时钟上升沿,使数据移位 for(j=20;j>0;j--); SCK_L; for(j=10;j>0;j--); duan<<= 1; // 数据移位 } LCK_H; } #endif #ifndef __DELAY_H__ #define __DELAY_H__ #define uchar unsigned char #define uint unsigned int //1ms延时程序 8M晶振 void delay(uint z) { unsigned int i,j; for(i = 0;i<2200;i++) for(j=0;j } #endif |
|
相关推荐
|
|
|
|
|
|
|
|
楼主好厉害!!!!
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问一个迭代法图形二值化的程序代码把宽改成240之后整个屏幕不显示是什么原因?
2654 浏览 0 评论
2645 浏览 1 评论
1885 浏览 1 评论
2035 浏览 2 评论
2602 浏览 2 评论
701浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 08:15 , Processed in 0.577383 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号