电子表430程序.docx
- 文档编号:4715963
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:19
- 大小:17.47KB
电子表430程序.docx
《电子表430程序.docx》由会员分享,可在线阅读,更多相关《电子表430程序.docx(19页珍藏版)》请在冰豆网上搜索。
电子表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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子表 430 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)