完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #include #include #include "dr_lcdseg.h" //调用段式液晶驱动头文件 #define XT2_FREQ 4000000 #define MCLK_FREQ 16000000 #define SMCLK_FREQ 4000000 long count; unsigned int ADval,zero; unsigned int real; void Delay_hx711_us(int t) { _NOP(); _NOP(); while(t--); } void PORT_Init(void) { P4SEL &=~ (BIT1+BIT2); P4DIR &=~ BIT2;//SDA P4DIR |= BIT1;//SCK P1DIR |= BIT5; } void initClock() { while(BAKCTL & LOCKIO) //解锁XT1引脚操作 BAKCTL &= ~(LOCKIO); UCSCTL6 &= ~XT1OFF; //启动XT1,选择内部时钟源 P7SEL |= BIT2 + BIT3; //XT2引脚功能选择 UCSCTL6 &= ~XT2OFF; //启动XT2 while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定 { UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= ~OFIFG; } UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; //避免DCO调整中跑飞 UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHz UCSCTL2 = MCLK_FREQ / (XT2_FREQ / 16); //XT2频率较高,分频后作为基准可获得更高的精度 UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2进行16分频后作为基准 while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定 { UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG); SFRIFG1 &= ~OFIFG; } UCSCTL5 = DIVA__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频 UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__DCOCLK; //设定几个CLK的时钟源 } long tozero(void) { char i; long count1; unsigned int count2; P4OUT |= BIT2; //SDA Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK count1=0; while( P4IN&BIT2 ); //SDA for(i=0;i<24;i++) { P4OUT |= BIT1; //SCK count1=count1<<1; P4OUT &=~ BIT1;//SCK if(P4IN&BIT2)//SDA count1++; } P4OUT |= BIT1; //SCK Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK Delay_hx711_us(4); P4OUT |= BIT1; //SCK Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK Delay_hx711_us(4); P4OUT |= BIT1; //SCK Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK Delay_hx711_us(4); count1=count1^0x800000; count2 = (unsigned int)(count1 >> 8);//取高十六位有效值 return count2; } void main(void) { char i; long fan,a; WDTCTL = WDTPW | WDTHOLD; // 停止看门狗 initClock(); //配置系统时钟 initLcdSeg(); //初始化段式液晶 PORT_Init(); zero=tozero(); //volatile unsigned int value = 0;//设置判断变量 while(1) //进入程序主循环 { __delay_cycles(MCLK_FREQ/2); //延时500ms P4OUT |= BIT2; //SDA Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK count=0; while( P4IN&BIT2 ); //SDA for(i=0;i<24;i++) { P4OUT |= BIT1; //SCK count=count<<1; P4OUT &=~ BIT1;//SCK if(P4IN&BIT2)//SDA count++; } P4OUT |= BIT1; //SCK Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK Delay_hx711_us(4); P4OUT |= BIT1; //SCK Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK Delay_hx711_us(4); P4OUT |= BIT1; //SCK Delay_hx711_us(4); P4OUT &=~ BIT1;//SCK Delay_hx711_us(4); fan=count^0x800000; ADval = (unsigned int)(fan >> 8);//取高十六位有效值 //ADval = count;//把结果赋给变量 if(ADval>zero&&ADval<51000) real=(ADval-zero)/153; else if(ADval>51000) { P1OUT|=BIT5; real=(ADval-zero)/130; } else if(ADval<=zero) real=0; if(real<10) real=0; if(real==0) P1OUT&=~BIT5; LCDSEG_DisplayNumber(real,0); //显示六位数,从111111-999999 __delay_cycles(MCLK_FREQ/2); //延时500ms } } |
|
相关推荐
3个回答
|
|
|
|
|
|
|
|
5529的时钟该如何配置,楼主解决了吗
|
|
|
|
只有小组成员才能发言,加入小组>>
3057个成员聚集在这个小组
加入小组2989 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3715 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2367 浏览 1 评论
4835 浏览 1 评论
2595 浏览 1 评论
1636浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3717浏览 2评论
2989浏览 1评论
1828浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 00:57 , Processed in 1.234663 second(s), Total 52, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号