完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "msp430x24x.h"
#define uint unsigned int #define uchar unsigned char void delay(); void delay_1ms(void); //延时程序 void delay_1s(void); //延时程序 void display(void); //显示程序 void busy_1602(void); //液晶查忙程序 void shj_1602(uchar a); //液晶写数据程序 void init_1602(void); //液晶初始化 void zhl_1602(uchar a); //液晶写指令程序 /***设置数码管显示****/ #define dat P2OUT //定义LCD1602的数据口为P2 #define CLR_RS P1OUT&=~BIT0; //置零P1.0位,也就是置零RS #define SET_RS P1OUT|=BIT0; //置壹P1.0位,也就是置壹RS #define CLR_RW P1OUT&=~BIT1; //置零P1.1位,也就是置零RW #define SET_RW P1OUT|=BIT1; //置壹P1.1位,也就是置壹RW #define CLR_EN P1OUT&=~BIT2; //置零P1.2位,也就是置零EN #define SET_EN P1OUT|=BIT2; //置壹P1.2位,也就是置壹EN uchar const Led1[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //不带小数点编码 uchar led2[]={0x40,0x79,0x24,0x30,0x19, 0x12,0x02,0x78,0x00,0x10}; //带小数点编码 uchar busy,a[4]; uint x; uchar Di***uf[4],flag; void RefreshDis(uint Data)//AD数据转换 { uint temp; temp=Data*100/255; temp=temp*33; Di***uf[0]=(temp/1000)|0x30; //百位 Di***uf[1]=('.'); Di***uf[2]=((temp%1000)/100)|0x30; Di***uf[3]=((temp%100)/10)|0x30; } void delay(void) { uint m; for(m=1000;m>0;m--); } void delay_1ms(void) //延时程序 { uchar i,j; for(i=0;i<10;i++) for(j=0;j<20;j++); } void delay_1s(void) //延时程序 { int i,j; for(i=0;i<10;i++) for(j=0;j<1000;j++); } void display1(void) //液晶显示程序 { uchar i; //定义计数值 init_1602(); //初始化1602 zhl_1602(0x80); //写指令 shj_1602('A'); shj_1602('D'); shj_1602('C'); shj_1602(':'); delay(); for(i=0;i<4;i++) { shj_1602( Di***uf);//1602调用数据 delay(); } shj_1602('V'); zhl_1602(0xc0); } void busy_1602(void) //查询忙碌标志信号程序 { do { CLR_EN; SET_RW; CLR_RS; SET_EN; busy=dat; CLR_EN; delay_1ms(); } while(busy&&0x10==1); } void zhl_1602(uchar a) //写指令到LCM程序 { busy_1602(); CLR_EN; CLR_RW; CLR_RS; SET_EN; dat=a; CLR_EN; } void shj_1602(uchar a) //写数据到LCM程序 { busy_1602(); CLR_EN; CLR_RW; SET_RS; SET_EN; dat=a; CLR_EN; } void init_1602(void) //启动LCM程序 { zhl_1602(0x38); zhl_1602(0x0c); zhl_1602(0x06); } void main() { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1DIR=0xff; P2DIR=0xff; /****设置AD寄存器****/ ADC12CTL0=ADC12ON+SHT0_2;//打开AD转换内核,参考电压3.3V ADC12CTL1=SHP; //ADC12MCTL0=SREF_1;//分频 ADC12IE=0X01;//使能中断允许 ADC12CTL0|=ENC; P6SEL|=1;//P6.0电压输入 P6DIR = 0xFE; flag=0; ADC12CTL0|=ADC12SC;//启动ADC转换器 _BIS_SR(LPM0_bits+ GIE);//进入低功耗睡眠模式 while(1) { display1();//1602显示 if(flag) { ADC12CTL0|=ADC12SC;//启动ADC转换器 flag=0; } //_EINT();//进入中断 //LPM3; _BIS_SR(CPUOFF+GIE); } } /****ADC12中断服务****/ #pragma vector=ADC12_VECTOR __interrupt void ADC12_ISR(void) { RefreshDis(ADC12MEM0/16); //display1();//中断处理 // _DINT();//清除中断 flag=1; LPM0_EXIT; //_BIS_SR_IRQ(CPUOFF); }
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
3038个成员聚集在这个小组
加入小组2937 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3615 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2348 浏览 1 评论
4811 浏览 1 评论
2577 浏览 1 评论
1335浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3615浏览 2评论
2937浏览 1评论
1522浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 22:17 , Processed in 1.464294 second(s), Total 69, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号