完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
程序如下,应该怎么修改,还是我的接线有误,单口接线接到1.4
#include"msp430g2553.h" #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define CS 0 #define SID 1 #define SCLK 2 #define LCDPORT P2OUT #define LCDDDR P2OUT #define SID_1 LCDPORT |= SID #define SID_0 LCDPORT &= ~SID #define SCLK_1 LCDPORT |= SCLK #define SCLK_0 LCDPORT &= ~SCLK #define CS_1 LCDPORT |= CS #define CS_0 LCDPORT &= ~CS #define DQ_OUT P1DIR|=BIT4 #define DQ_IN P1DIR&=~BIT4 #define DQ_H P1OUT|=BIT4 #define DQ_L P1OUT&=~BIT4 #define DQ_VOLT (P1IN&BIT4) uchar a[]={"当前温度为:**.**C "}; uchar MM=0; uint x=0; //200us延时程序 void delay(uchar i) { uchar j,k; for(j=i;j>0;j--) for(k=100;k>0;k--); _NOP(); } /*********************************************************** *名 称:LCD_Write_cmd() *功 能:写一个命令到LCD12864 *入口参数:cmd:待写入的命令,无符号字节形式 *出口参数:无 *说 明:写入命令时,RW=0,RS=0 扩展成24位串行发送 *格 式:11111 RW0 RS 0 xxxx0000 xxxx0000 * |最高的字节 |命令的bit7~4|命令的bit3~0| ***********************************************************/ void write_cmd(uchar cmd) { uchar i,high4bits,low4bits; ulong lcdcmd; high4bits = cmd & 0xf0; low4bits = cmd & 0x0f; lcdcmd=((ulong)0xf8<<16)+((ulong)high4bits<<8)+((ulong)low4bits<<4); CS_1; SCLK_0; for(i=0;i<24;i++) { SID_0; if(lcdcmd & 0x00800000) SID_1; lcdcmd <<=1; delay(3); SCLK_1; delay(3); SCLK_0; } CS_0; } /*********************************************************** *名 称:LCD_Write_Byte() *功 能:向LCD12864写入一个字节数据 *入口参数:byte:待写入的字符,无符号形式 *出口参数:无 *范 例:LCD_Write_Byte(*F*) //写入字符*F* ***********************************************************/ void write_dat(uchar dat) { uchar i,high4bits,low4bits; ulong lcddat; high4bits = dat & 0xf0; low4bits = dat & 0x0f; lcddat=((ulong)0xfa<<16)+((ulong)high4bits<<8)+((ulong)low4bits<<4); CS_1; SCLK_0; for(i=0;i<24;i++) { SID_0; if(lcddat & 0x00800000) SID_1; lcddat <<=1; delay(3); SCLK_1; delay(3); SCLK_0; } CS_0; } /*********************************************************** *名 称:LCD_pos() *功 能:设置液晶的显示位置 *入口参数:x:第几行,1~4对应第1行~第4行 * y:第几列,0~15对应第1列~第16列 *出口参数:无 *范 例:LCD_pos(2,3) //第二行,第四列 ***********************************************************/ void lcd_pos(uchar x,uchar y) { uchar pos; switch(x) { case 1:pos=0x80;break; case 2:pos=0x90;break; case 3:pos=0x88;break; case 4:pos=0x98;break; default:pos=0x80; } pos += y; write_cmd(pos); } /****************************************************/ //LCD12864初始化 void LCD_init(void) { write_cmd(0x30); delay(5); write_cmd(0x0C); delay(5); write_cmd(0x01); delay(5); write_cmd(0x02); delay(5); } //数据处理 void data_display(uchar aa) { unsigned char lcd_table[4]; lcd_table[0]=aa/100; lcd_table[1]=aa%100/10; lcd_table[2]=aa%10; lcd_table[3]=aa%1; write_dat((lcd_table[0]+0x30)); //显示整数部分的百位数 0x30的原因CGROM和CGRAM与字符的对应关系 write_dat((lcd_table[1]+0x30));//显示整数数部分的十位 write_dat((lcd_table[2]+0x30)); //显示个位 write_dat(a[11]); write_dat((lcd_table[3]+0x30)); } //初始化函数 void init_ds18b20() { uchar error=0; DQ_H; delay(8); DQ_L; delay(80); DQ_H; delay(5); DQ_IN; _NOP(); if(DQ_IN) error=1; else error=0; delay(20); } //读一个字节 uchar readonechar(void) { uchar i=0; uchar dat=0; DQ_OUT; for(i=8;i>0;i--) { DQ_H; // 给脉冲信号 delay(1); DQ_L; dat>>=1; _NOP(); DQ_H; // 给脉冲信号 _NOP(); if(P1IN&BIT4) dat|=0x80; delay(4); } return(dat); } //写一个字节 void writeonechar(uchar dat) { uchar i=0; for (i=8; i>0; i--) { DQ_L; if(dat&0x01) DQ_H; else DQ_L; delay(4); DQ_H; dat>>=1; } } uint readtemperature(void) { uchar a=0; uchar b=0; uint t=0; float tt=0; init_ds18b20(); writeonechar(0xCC); // 跳过读序号列号的操作 writeonechar(0x44); // 启动温度转换 delay(125); init_ds18b20(); writeonechar(0xCC); //跳过读序号列号的操作 writeonechar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=readonechar();//低四位 b=readonechar();//高四位 t=a+b; t<<=8; t=t|a; tt=t*0.0625; //精确到0.0625 tt= tt*100; //放大100倍输出 return(t); } void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P1DIR|=BIT0; P1OUT|=BIT0; P1DIR|=(BIT1 + BIT2 + BIT3); LCD_init(); while(1) { x=readtemperature(); delay(40); lcd_pos(1,0); write_dat(a[0]); write_dat(a[1]); write_dat(a[2]); write_dat(a[3]); write_dat(a[4]); write_dat(a[5]); write_dat(a[6]); write_dat(a[7]); write_dat(a[8]); lcd_pos(2,3); data_display(x); write_dat(a[13]); write_dat(a[14]); write_dat(a[15]); write_dat(a[16]); } } |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
2940个成员聚集在这个小组
加入小组2690 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3015 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2274 浏览 1 评论
4706 浏览 1 评论
2488 浏览 1 评论
957浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3015浏览 2评论
2690浏览 1评论
1089浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-6 03:25 , Processed in 1.126548 second(s), Total 87, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191