📄 main.c
字号:
#include "msp430x41x.h"
#define R13 0X0020
#define R23 0x0040
#define R33 0x0080
#define COM1 0x0004
#define COM2 0x0008
#define COM3 0X0010
#define SegA 0x01
#define SegB 0x02
#define SegC 0x04
#define SegD 0x80
#define SegE 0x40
#define SegF 0x10
#define SegG 0x20
#define SegH 0x08
#define D0 SegA+SegB+SegC+SegD+SegE+SegF
#define D1 SegB+SegC
#define D2 SegA+SegB+SegD+SegE+SegG
#define D3 SegA+SegB+SegC+SegD+SegG
#define D4 SegB+SegC+SegF+SegG
#define D5 SegA+SegC+SegD+SegF+SegG
#define D6 SegA+SegC+SegD+SegE+SegF+SegG
#define D7 SegA+SegB+SegC
#define D8 SegA+SegB+SegC+SegD+SegE+SegF+SegG
#define D9 SegA+SegB+SegC+SegD+SegF+SegG
#define E SegA+SegD+SegE+SegF+SegG
#define R SegA+SegB+SegC+SegE+SegF+SegG
#define H SegB+SegC+SegE+SegF+SegG
#define L SegD+SegE+SegF
int dirD[10]={D0,D1,D2,D3,D4,D5,D6,D7,D8,D9}; //定义十个显示数字;
//初始化液晶
void LCDinitial()
{
int i;
for(i=0;i<10;i++)
LCDMEM[i]=0;
P5SEL=R33+R23+R13+COM1+COM2+COM3;
LCDCTL=LCDSG0_2+LCD4MUX+LCDON;
BTCTL=BTSSEL+BTDIV+BTIP1+BTIP2+BTFRFQ0; //fLCD为512Hz,BT的中断置位时间间隔为2秒。????????
}
//显示延时子程序:
void showdelay(d,l)
{
int i,j;
for(i=0;i<d;i++)
for(j=0;j<l;j++)
;
}
//显示子程序,用来显示要输出的数据
void show(int m,long int n) //m为不需要的LCD段数
{
unsigned char i,k;
long int j=1;
for(k=0;k<(7-m);k++) //确定cnt需要对10 100 or1000除
j=j*10;
for(i=0;i<m;i++)
LCDMEM[i]=0;
for(i=m;i<8;i++)
{
LCDMEM[i]=dirD[(n/j)%10];
j=j/10;
}
}
//显示HELLO;
void showhello()
{
LCDMEM[0]=H;
LCDMEM[1]=E;
LCDMEM[2]=L;
LCDMEM[3]=L;
LCDMEM[4]=D0;
showdelay(300,3000);
}
//显示ERR
void showerr()
{
LCDMEM[0]=0;
LCDMEM[1]=E;
LCDMEM[2]=R;
LCDMEM[3]=R;
LCDMEM[4]=0;
showdelay(300,300);
}
//显示服务程序,给出显示需要几位数码管
int showsv(long int k)
{
int div[8]; //存放cnt的每一位(十进制)
int i;
signed int d=-1;
long int j=10000000;
for(i=0;i<8;i++)
{
div[i]=(k/j)%10;
j=j/10;
}
do d++;
while(div[d]==0 && d<7); //查看cnt是几位数,来确定需要的LCD段数
return d; //返回的是不需要的LCD段数
}
//鸣叫子程序BELL1
void BELL1()
{
P1DIR|=BIT2;
P1IE&=~BIT2;
P1OUT|=BIT2;
showdelay(250,500);
P1OUT&=~BIT2;
;
}
//主程序;
int main()
{
WDTCTL = WDTPW + WDTHOLD;
SCFQCTL=31;
SCFI0=0;
FLL_CTL0|=XCAP18PF;
LCDinitial(); //初始化LCD
showhello(); //显示HELLO
// P1DIR&=~BIT3;
// P1SEL&=~BIT3;
// P1IE&=~BIT3;
long int cnt=0;
int lcdnum; //需要的LCD个数
int sign=0;
P1DIR&=~BIT3;
P1DIR&=~BIT4;
P1SEL&=~BIT3;
P1SEL&=~BIT4;
P1IE=0X00;
while(cnt<11111112)
{
if(!(P1IN&BIT3))
{
if(!(P1IN&BIT4))
BELL1();
else if(P1IN&BIT4)
{
if(sign==1)
{
cnt+=1;
sign=0;
}
else if(sign==0)
;
}
}
else if(!(P1IN&BIT4))
sign=1;
lcdnum=showsv(cnt);
show(lcdnum,cnt);
}
LCDinitial();
showerr();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -