电子表430程序.docx

上传人:b****6 文档编号:4715963 上传时间:2022-12-07 格式:DOCX 页数:19 大小:17.47KB
下载 相关 举报
电子表430程序.docx_第1页
第1页 / 共19页
电子表430程序.docx_第2页
第2页 / 共19页
电子表430程序.docx_第3页
第3页 / 共19页
电子表430程序.docx_第4页
第4页 / 共19页
电子表430程序.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

电子表430程序.docx

《电子表430程序.docx》由会员分享,可在线阅读,更多相关《电子表430程序.docx(19页珍藏版)》请在冰豆网上搜索。

电子表430程序.docx

电子表430程序

#include

/*Privatetypedef-----------------------------------------------------------*/

/*Privatedefine------------------------------------------------------------*/

#defineCPU_F((double)1000000)

#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))

#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))

//LCDsegmentdefinitions.

#defined0x01

#definec0x20

#defineb0x40

#definea0x80

#definedp0x10

#defineg0x04

#definef0x08

#definee0x02

#defineM6//液晶屏显示个数

#defineY10//分秒个位每位液晶屏显示字数

#defineX6//分秒十位每位液晶屏显示字数

/*Privatemacro-------------------------------------------------------------*/

/*Privatevariables---------------------------------------------------------*/

//const

charchar_gen[]={//Asusedin430DayWatchDemoboard

a+b+c+d+e+f,//Displays"0"

b+c,//Displays"1"

a+b+d+e+g,//Displays"2"

a+b+c+d+g,//Displays"3"

b+c+f+g,//Displays"4"

a+c+d+f+g,//Displays"5"

a+c+d+e+f+g,//Displays"6"

a+b+c,//Displays"7"

a+b+c+d+e+f+g,//Displays"8"

a+b+c+d+f+g,//Displays"9"

a+b+c+e+f+g,//Displays"A"

c+d+e+f+g,//Displays"b"

a+d+e+f,//Displays"c"

b+c+d+e+g,//Displays"d"

a+d+e+f+g,//Displays"E"

a+e+f+g,//Displays"f"

a+b+c+d+f+g,//Displays"g"

c+e+f+g,//Displays"h"

b+c,//Displays"i"

b+c+d,//Displays"j"

b+c+e+f+g,//Displays"k"

d+e+f,//Displays"L"

a+b+c+e+f,//Displays"n"

a+b+c+d+e+f+g+dp//Displays"full"

};

/*Privatefunctionprototypes-----------------------------------------------*/

voidInit_lcd(void);//LCD初始化

voidLcdGo(unsignedcharDot);//打开或关闭液晶

voidLcdBlink(unsignedchardoit);//显示或者消隐显示内容

voidLCD_Clear(void);//清屏

voidInit_TS3A5017DR(void);//ConfigureTS3A5017DRIN1andIN2

voidBacklight_Enable(void);//打开背光

/*Privatefunctions---------------------------------------------------------*/

/*!

*函数功能:

配置LCDsegmentoutput功能

*输入参数:

*返回值:

*/

voidInit_lcd(void)

{

LCDBCTL0=LCDDIV0+LCDPRE0+LCDMX1+LCDSSEL+LCDMX1+LCD4MUX;

LCDBPCTL0=LCDS0+LCDS1+LCDS2+LCDS3+LCDS4+LCDS5+LCDS6+LCDS7+LCDS8

+LCDS9+LCDS10+LCDS11;

P5SEL=0xfc;

}

/*****************************************************************************

打开或关闭液晶

1:

打开0:

关闭

*****************************************************************************/

/*!

*函数功能:

打开或者关闭液晶

*输入参数:

Dot

*Dot为1时:

打开液晶显示

*Dot为0时:

关闭液晶显示

*返回值:

*/

voidLcdGo(unsignedcharDot)

{

if(Dot==1)

{

//打开液晶显示

LCDBCTL0|=LCDON;

}

elseif(Dot==0)

{

//关闭液晶显示

LCDBCTL0&=~LCDON;

}

}

/*!

*函数功能:

显示或者消隐显示内容

*输入参数:

*返回值:

*/

voidLcdBlink(unsignedchardoit)

{

if(doit==0)

{

LCDBCTL0&=~LCDSON;

}

elseif(doit==1)

{

LCDBCTL0|=LCDSON;

}

}

/*!

*函数功能:

清除LCD的显示内容

*输入参数:

*返回值:

*/

voidLCD_Clear(void)//清屏

{

unsignedcharindex;

for(index=0;index<12;index++)

{

LCDMEM[index]=0;

}

}

/*!

*函数功能:

配置TS3A5017DR通道

*输入参数:

*返回值:

*/

voidInit_TS3A5017DR(void)

{

//ConfigureTS3A5017DRIN1andIN2

P1DIR|=BIT6+BIT7;//P3.4:

IN1;P3.5:

IN2setasoutput

P1OUT&=~BIT7;//IN1=0

P1OUT|=BIT6;//IN2=1

}

/*!

*函数功能:

LCDsegment背光使能

*输入参数:

*返回值:

*/

voidBacklight_Enable(void)

{

P8DIR|=BIT0;

P8OUT|=BIT0;

}

/*!

*函数功能:

LCDsegment相应的值加1

*输入参数:

LCDMEM[]地址

*返回值:

LCDMEM[]内容

*/

charadd1(char*addr)

{

charz;

addr++;

z=*addr;

returnz;

}

intmain()

{

inti=10,j,k,s,t,u,w,x,y;

WDTCTL=WDTPW+WDTHOLD;//StopWDT

Init_lcd();//LCD初始化

LcdGo

(1);//打开或关闭液晶

LcdBlink

(1);//显示或者消隐显示内容

LCD_Clear();//清屏

Init_TS3A5017DR();//ConfigureTS3A5017DRIN1andIN2

Backlight_Enable();//打开背光

P4DIR&=~(BIT2+BIT3);

P2IE|=BIT7+BIT6+BIT5;

P2IFG&=~(BIT7+BIT6+BIT5);

__enable_interrupt();

loop:

while

(1)

{

for(s=0;s<3;)//小时十位循环

{

for(t=0;t

{

for(u=0;u

{

for(w=0;w

{

for(x=0;x

{

for(y=0;y

{

k=y;//k为保护i的中间变量

if(y==0&&x==0&&w==0&&u==0&t==0&&s==0)//初始化为00:

00:

00

{

for(j=0;j

LCDMEM[j]=char_gen[y];

}

//elseif(y==0&&x==0&&w==0&&u==0&t==3&&s==2)

//{

//for(j=2;j

//LCDMEM[j]=char_gen[y];

//}

else

{

for(j=0;j<3;j++)//寻找并保存第一位小时十位的值

{

if(LCDMEM[0]==char_gen[j])

{

s=j;

}

}

for(j=0;j

{

if(LCDMEM[1]==char_gen[j])

{

t=j;

}

}

for(j=0;j

{

if(LCDMEM[2]==char_gen[j])

{

u=j;

}

}

for(j=0;j

{

if(LCDMEM[3]==char_gen[j])

{

w=j;

}

}for(j=0;j

{

if(LCDMEM[4]==char_gen[j])

{

x=j;

}

}

/***

for(j=0;j

{//第六位秒个位不可中断设置

if(LCDMEM[5]==char_gen[j])

{

y=j;

y++;

}

}

***/

LCDMEM[0]=char_gen[s];

LCDMEM[1]=char_gen[t];

LCDMEM[2]=char_gen[u];

LCDMEM[3]=char_gen[w];

if(LCDMEM[5]==char_gen[0]&&i==y-1)

{

x=0;

y=0;

k=y;

y++;

}

LCDMEM[4]=char_gen[x];

LCDMEM[5]=char_gen[y];

}

/**

for(j=0;j

{

if(LCDMEM[5]==char_gen[j])

{

s=j;

}

}

**/

for(j=0;j<=42;j++)//延时25*43即1075ms,检测是否进入中断

{

if((P4IN&BIT2)==0)//判断是否进入中断

{

i=y;//求出进入中断前,y的值,以供出中断后(上面第四行)判断所用

P2IFG|=BIT7;

}

delay_ms(25);

}

P2IFG&=~BIT7;

//LCDMEM[2]=char_gen[u];

//LCDMEM[3]=char_gen[w];

//LCDMEM[4]=char_gen[x];

//LCDMEM[5]=char_gen[y];

y=k;

}

if(LCDMEM[5]==char_gen[Y-1])

{

x++;

LCDMEM[4]=char_gen[x];

LCDMEM[5]=char_gen[0];

}

}

if(LCDMEM[4]==char_gen[X]&&LCDMEM[5]==char_gen[0])

{

w++;

LCDMEM[3]=char_gen[w];

LCDMEM[4]=char_gen[0];

LCDMEM[4]=char_gen[0];

}

}

if(LCDMEM[3]==char_gen[Y]&&LCDMEM[4]==char_gen[0]&&LCDMEM[5]==char_gen[0])

{

u++;

LCDMEM[2]=char_gen[u];

LCDMEM[3]=char_gen[0];

LCDMEM[4]=char_gen[0];

LCDMEM[5]=char_gen[0];

}

}

if(LCDMEM[2]==char_gen[X]&&LCDMEM[3]==char_gen[0]&&LCDMEM[0]!

=char_gen[2])

{

t++;

LCDMEM[1]=char_gen[t];

LCDMEM[2]=char_gen[0];

LCDMEM[3]=char_gen[0];

LCDMEM[4]=char_gen[0];

LCDMEM[5]=char_gen[0];

}

elseif(LCDMEM[2]==char_gen[X]&&LCDMEM[3]==char_gen[0]&&LCDMEM[1]!

=char_gen[3]&&LCDMEM[0]==char_gen[2])

{

t++;

LCDMEM[1]=char_gen[t];

LCDMEM[2]=char_gen[0];

LCDMEM[3]=char_gen[0];

LCDMEM[4]=char_gen[0];

LCDMEM[5]=char_gen[0];

}

elseif(LCDMEM[2]==char_gen[X]&&LCDMEM[3]==char_gen[0]&&LCDMEM[1]==char_gen[3]&&LCDMEM[0]==char_gen[2])

{

LCDMEM[0]=char_gen[0];

LCDMEM[1]=char_gen[0];

LCDMEM[2]=char_gen[0];

LCDMEM[3]=char_gen[0];

LCDMEM[4]=char_gen[0];

LCDMEM[5]=char_gen[0];

gotoloop;

//for(j=0;j

//LCDMEM[j]=char_gen[y];

}

}

if(LCDMEM[1]==char_gen[Y]&&LCDMEM[2]==char_gen[0]&&LCDMEM[0]!

=char_gen[2])

{

s++;

LCDMEM[0]=char_gen[s];

LCDMEM[1]=char_gen[0];

LCDMEM[2]=char_gen[0];

LCDMEM[3]=char_gen[0];

LCDMEM[4]=char_gen[0];

LCDMEM[5]=char_gen[0];

}

}

}

}

//gai

#pragmavector=PORT2_VECTOR

__interruptvoidport_2(void)

{

inti=10,j,k;

char*addr0,*addr1,*addr2,*addr3;

switch(P2IV)//switch语句仅用到case16情况,其他没用,应该用中断嵌套,不会用,改成goto语句

{

case0:

break;

case2:

break;

case4:

break;

case6:

break;

case8:

break;

case10:

break;

case12:

break;

case14:

break;

case16:

//if(P2IV==0x0010u)

{

LCDMEM[2]=0;

LCDMEM[3]=0;

LCDMEM[4]=0;

LCDMEM[5]=0;

SW5_hour:

for(i=0;i

{

if(LCDMEM[1]==char_gen[i])

addr1=&char_gen[i];

//continue;

}

LCDMEM[1]=add1(addr1);

//LCDMEM[0]

if(LCDMEM[1]==char_gen[10]&&LCDMEM[0]!

=char_gen[2])

{

/**

for(j=0;j<3;j++)//寻找并保存第一位小时十位的值

{

if(LCDMEM[0]==char_gen[j])

{

s=j;

}

}//可替换下面for循环,但add1子函数需改变

***/

for(j=0;j<3;j++)//寻找并保存第一位小时十位的值

{

if(LCDMEM[0]==char_gen[j])

addr0=&char_gen[j];

//continue;

}

LCDMEM[0]=add1(addr0);

LCDMEM[1]=char_gen[0];

}

elseif(LCDMEM[1]==char_gen[4]&&LCDMEM[0]==char_gen[2])

{

LCDMEM[0]=char_gen[0];

LCDMEM[1]=char_gen[0];

}

delay_ms(300);

for(k=0;k<3000;)//在此处进入死循环,决定进入分钟修改界面,或者小时加一

{

if((P4IN&BIT3)==0)

{

gotoSW5_hour;

}

if((P4IN&BIT2)==0)//判断是否进入中断(切换到分钟界面)

{

gotoSW5_M;

}

//else

//P2IFG&=~BIT6;

delay_ms

(2);

}

P2IFG&=~BIT7;

}

break;

SW5_M:

{

//s=LCDMEM[0];

//t=LCDMEM[1];

//LCDMEM[0]=0;

//LCDMEM[1]=0;

LCDMEM[2]=char_gen[0];

LCDMEM[3]=char_gen[0];

LCDMEM[4]=0;

LCDMEM[5]=0;

SW5_minute:

for(i=0;i

{

if(LCDMEM[3]==char_gen[i])

addr3=&char_gen[i];

//continue;

}

LCDMEM[3]=add1(addr3);

//LCDMEM[0]

if(LCDMEM[3]==char_gen[10]&&LCDMEM[2]!

=char_gen[5])

{

/**

for(j=0;j<3;j++)//寻找并保存第一位小时十位的值

{

if(LCDMEM[0]==char_gen[j])

{

s=j;

}

}//可替换下面for循环,但add1子函数需改变

***/

for(j=0;j

{

if(LCDMEM[2]==char_gen[j])

addr2=&char_gen[j];

//continue;

}

LCDMEM[2]=add1(addr2);

LCDMEM[3]=char_gen[0];

}

elseif(LCDMEM[3]==char_gen[Y]&&LCDMEM[2]==char_gen[5])

{

LCDMEM[2]=char_gen[0];

LCDMEM[3]=char_gen[0];

}

delay_ms(300);

for(k=0;k<20;)//在此处等待按键信号,决定分钟加一,或者转到主界面

{

if((P4IN&BIT3)==0)

{

gotoSW5_minute;

}

if((P4IN&BIT2)==0)//判断是否进入中断(切换到秒界面)

{

gotoSW5_S;

//delay_ms(100);

}

delay_ms(300);

}

//LCDMEM[0]=s;

//LCDMEM[1]=t;

//P2IFG&=~BIT7;

}

break;

SW5_S:

{

LCDMEM[4]=char_gen[0];

LCDMEM[5]=char_gen[0];

delay_ms(300);

//if((P4IN&BIT2)==0)//判断是否进入中断(切换到分钟界面)

//{

//break;

//}

//delay_ms(300);

P2IFG&=~BIT7;

}

break;

}

}

/*****

#pragmavector=PORT2_VECTOR

__interruptvoidport_2(void)

{

inti,j;

char*addr0,*addr1;

cycle:

if((P4IN&BIT3)==0)

{

LCDMEM[2]=0;

LCDMEM[3]=0;

LCDMEM[4]=0;

LCDMEM[5]=0;

for(i=0;i

{

if(LCDMEM[1]==char_gen[i])

addr1=&char_gen[i];

//continue;

}

LCDMEM[1]=add1(addr1);

//LCDMEM[0]

if(LCDMEM[1]==char_gen[10]&&LCDMEM[0]!

=char_gen[2])

{

for(j=0;j<3;j++)

{

if(LCDMEM[0]==char_gen[j])

addr0=&char_gen[j];

//c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1