完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define unchar unsigned char #define uint unsigned char static double data;//用来存储ADC12MEM中的数据 int a,b,c=0; //用来存储将要显示在LCD上的各位数据 //#define CS P2DIR |= BIT2 #define CS_H P2OUT |= BIT2 #define CS_L P2OUT &= ~BIT2 //#define SID P2DIR |= BIT3 #define SID_H P2OUT |= BIT3 #define SID_L P2OUT &= ~BIT3 //#define SCLK P2DIR |= BIT4 #define SCLK_H P2OUT |= BIT4 #define SCLK_L P2OUT &= ~BIT4 //#define RST P2DIR |= BIT5 #define RST_H P2OUT |= BIT5 #define RST_L P2OUT &= ~BIT5 #define PSB_L P2OUT &= ~BIT6 /*void delay( unchar t); void sendbyte( unchar z); void write_com( unchar cmd); void write_data(unchar disp); void init_lcd(); void lcd_clear(); void dis***c( char *s); void test (); void gotoxy(uint x,uint y); void initADC12(); void SendDouble(double data); */ void delay( unchar t) { uint i , j ; for(i = 0; i < t ;i ++) for (j = 0; j < 10; j++); } void sendbyte( unchar z) { uint i; for(i = 0; i <8; i ++) { if ((z< { SID_H; //P2OUT |= BIT3; } else { SID_L;//P2OUT &= ~BIT3; } SCLK_L;//P2OUT &= ~BIT4; SCLK_H;//P2OUT |= BIT4; } } void write_com( unchar cmd) //写串口指令 { CS_H;//P2OUT |= BIT2; sendbyte (0xf8); //输指令 sendbyte (cmd & 0xf0); sendbyte ((cmd << 4) & 0xf0); delay(2); } void write_data(unchar disp) //写数据 { CS_H;//P2OUT |= BIT2; sendbyte(0xfa);//传数据 sendbyte(disp & 0xf0); sendbyte((disp << 4) & 0xf0); delay(2); } void lcd_clear() { write_com(0x01); //清屏指令 write_com(0x02); //光标归位 即光标置于左上位置 } void init_lcd() { RST_L;//P2OUT &= ~BIT5;//RST = 0; delay(100); RST_H;//P2OUT |= BIT5;//RST = 1; delay(100); write_com(0x30); //基本指令操作 delay(50); write_com(0x0c); //显示开关闭光标 delay(50); } /*void dis***c( char *s) //显示字符串 { while ( *s > 0) { write_data(*s); s++; delay(50); } }*/ /*void gotoxy(uint x,uint y) //定位 ,x为行,y为列 { unchar wz; switch(x) { case 1: wz=0x80; break;//当x为1指向第一行 case 2: wz=0x90; break;//当x为2指向第二行 case 3: wz=0x88; break;//当x为3指向第三行 case 4: wz=0x98; break;//当x为4指向第四行 default: wz=0x80; //x为其它值时指向第一行 } wz=wz+y; write_com(wz); } void test () { write_com(0x03); delay(50); //write_com(0x81); gotoxy(1,00);dis***c("R:"); gotoxy(1,01);dis***c("123"); //write_com(0x91); gotoxy(2,00);dis***c("G:"); gotoxy(2,01);dis***c("222"); gotoxy(3,00);dis***c("B:"); gotoxy(3,01);dis***c("111"); } */ void initADC12() { P6SEL=0X01;//P6.0作为模拟输入 ADC12IE=0X01; //开放中断ADC12IFG.0 ADC12CTL0=ADC12ON+ADC12SHT0_4+ADC12REFON+ADC12REF2_5V;//打开ADC转换的核,采用内部参考电压2.5v; ADC12CTL1=ADC12SHP; //信号源内部触发 ADC12MCTL0=ADC12SREF_1;//使用内部2.5V作为参考电压 ADC12CTL0 |=ADC12ENC; //开放使能 } #pragma vector=ADC12_VECTOR __interrupt void ADC12ISR() { data=ADC12MEM0*2.5/4095; //data为全局变量 write_com(0x02); _BIC_SR_IRQ(CPUOFF); // Clear CPUOFF bit from 0(SR) } void SendDouble(double data) { data *=100; int temp =(int)data; a = temp/100;//考虑到由于内部参考电压的限制,且仅考虑两位小数的情况 b = (temp%100)/10; c = temp%10; write_data(a+0x30); write_data(*.*); write_data(b+0x30); write_data(c+0x30); write_data(* *); write_data(*V*); } void main(void) { WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer double temp=0.0; P2DIR |= BIT2 + BIT3 + BIT4 + BIT5 + BIT6; PSB_L; delay(1); init_lcd(); initADC12(); lcd_clear(); delay(10); while(1) { ADC12CTL0 |= ADC12SC; // Sampling open _BIS_SR(CPUOFF + GIE); // LPM0, ADC12_ISR will force exit if(temp!=data) { temp=data; SendDouble(data); } } } 求助啊 |
|
相关推荐
1个回答
|
|
没人?么么么么么么么么么吗
|
|
|
|
只有小组成员才能发言,加入小组>>
3029个成员聚集在这个小组
加入小组2917 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3576 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2336 浏览 1 评论
4795 浏览 1 评论
2571 浏览 1 评论
1317浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3577浏览 2评论
2917浏览 1评论
1495浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 04:16 , Processed in 1.343925 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号