?? t9_v1.c
字號:
}
}
/**************************************************************************************************
*
*顯示6*16點陣的英文函數
*函數聲明:void display_e(uchar page,uchar col,uchar code *str,uchar n);
*函數參數:page為頁地址(0-7),col為列地址(0-127),str為數組名,n為要顯示第n個英文點陣
*函數作用:
*
**************************************************************************************************/
void display_e(uchar page,uchar col,uchar code *str,uchar n)
{
uchar i,j,num;
if(col<=58)
{
CS2=1;CS1=0;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j);write_cmd(COL+col);
for(i=0;i<6;i++)
write_data(str[n*12+6*j+i]);
}
}
else if(col>=64)
{
CS2=0;CS1=1;
col=col-64;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j);write_cmd(COL+col);
for(i=0;i<6;i++)
write_data(str[n*12+6*j+i]);
}
}
else if(col>58&&col<64)
{
num=64-col;
CS2=1;CS1=0;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j);write_cmd(COL+col);
for(i=0;i<num;i++)
write_data(str[n*12+6*j+i]);
}
CS2=0;CS1=1;
col=0;
for(j=0;j<2;j++)
{
write_cmd(PAGE+page+j);write_cmd(COL+col);
for(i=num;i<6;i++)
write_data(str[n*12+6*j+i]);
}
}
}
/**************************************************************************************************
*顯示小數字函數
*函數聲明:void display_num(uchar page,uchar col,uchar code *str,uchar n);
*函數參數:page為頁地址(0-7),col為列地址(0-127),str為數組名
*函數作用:顯示數字0-9
*
*
**************************************************************************************************/
void display_num(uchar page,uchar col,uchar code *str,uchar n)
{
uchar i;
if(col<64)
{
CS2=1;CS1=0;
}
else
{
CS2=0;CS1=1;
col=col-64;
}
write_cmd(PAGE+page);write_cmd(COL+col);
for(i=0;i<5;i++)
write_data(str[5*n+i]);
}
/**************************************************************************************************
*
*界面1函數
*函數聲明:void screen_1();
*函數參數:無
*函數作用:顯示歡迎界面
*
**************************************************************************************************/
void screen_1()
{
uchar i;
uchar ii,iii;
init();
cls();
for(i=0;i<7;i++)display_h(2,20+12*i,str_2,i);
for(i=0;i<3;i++)display_h(4,44+12*i,str_2,i+7);
for(i=0;i<10;i++)display_h(6,4+12*i,str_2,10+i);
while(1)
{
ii=key_ii();
iii=key();
if(ii!=0xff||iii!=0)
{
state=1;
break;
}
}
}
/**************************************************************************************************
*
*界面2函數
*函數聲明:void screen_2();
*函數參數:無
*函數作用:
*
* 1:[讀短信]
* 2:[寫短信]
* 確定 取消
**************************************************************************************************/
void screen_2()
{
uchar i;
uchar ii,iii;
uchar cnt=0;
init();
cls();
display_h(2,40-12,symbol,0);
display_h(2,40+36,symbol,1);
display_h(2,40,symbol,2);
display_h(2,40+12,symbol,4);
display_h(2,40+24,symbol,5);
display_e(2,5,b_num,1);
display_e(2,5+6,b_num,10);
display_e(4,5,b_num,2);
display_e(4,5+6,b_num,10);
for(i=0;i<3;i++)display_h(4,40+12*i,symbol,3+i);
for(i=0;i<2;i++)display_h(6,12*i,str_1,i); //顯示“確定”
for(i=0;i<2;i++)display_h(6,100+12*i,symbol,6+i); //顯示“取消”
while(1)
{
iii=key();
ii=key_ii();
if(ii==8)
{
display_h(2,40-12,symbol,0); //“〔”
display_h(2,40+36,symbol,1); // “〕”
display_h(4,28,str_1,4);
display_h(4,76,str_1,4);
cnt=0;
}
else if(ii==9)
{
display_h(4,40-12,symbol,0); //“〔”
display_h(4,40+36,symbol,1); // “〕”
display_h(2,28,str_1,4);
display_h(2,76,str_1,4);
cnt=1;
}
if (iii==6)
{
if(cnt==1)
{
state=2;
break;
}
else if(cnt==0)
{
state=3;
break;
}
}
if(iii==7)
{
state=0;
break;
}
}
}
/**************************************************************************************************
*
*界面3函數
*函數聲明:void screen_3();
*函數參數:無
*函數作用:用于寫短信
*
**************************************************************************************************/
void screen_3()
{
unsigned char *p,input_string[5];
unsigned char *temp;//用于保存上一次查找的漢字
uchar page=0;
uchar i,ii,iii;
uchar cnt=0;
uchar keycode,length=0;
//uchar iic;
//unsigned char *p_mem;
unsigned int mem,cmp;
length_h=0;
init();
cls();
line_v(63,16,15);
line_v(64,16,15);
line_h(0,30,128);
//========================================================
//中間為測試代碼
//IICWrite(0x100,84);
//IICWrite(0x150,88);
//iic=IICRead(0x100);
//iic=IICRead(0x150);
//p=T9PY("334",3);
//mem=(unsigned int)p;
//IICWrite(0x150,mem&0xff);
//IICWrite(0x151,mem>>8);
//mem=IICRead(0x150)+(IICRead(0x151)<<8);
//p=(uchar code *)mem;
//for(i=0;i<8;i++)display_h(0,12*i,p,i);
//========================================================
for(i=0;i<2;i++)
{
display_h(6,i*12,str_1,i); //顯示“確定”
display_h(6,104+i*12,str_1,i+2); //顯示“拼音”
}
line_v(0,0,16); //顯示光標
while(1)
{
iii=key();//判斷“確定”鍵是否被按下
if(iii==6)
{
state=1;
break;
}
if(cnt==0) //CNT=0時為拼音輸入狀態
{ //掃描鍵盤,并且判斷是否是在“1”-“9”之間
ii=key_ii();
if(ii!=0xff)
{
if(ii==0)keycode='7';
if(ii==1)keycode='8';
if(ii==2)keycode='9';
if(ii==4)keycode='4';
if(ii==5)keycode='5';
if(ii==6)keycode='6';
if(ii==9)keycode='2';
if(ii==10)keycode='3';
if(ii>=0&&ii<=10&&ii!=3&&ii!=8) //當按鍵為字母鍵時
{
for(i=0;i<8;i++) display_h(4,i*16+5,str_1,4);//清屏
for(i=0;i<8;i++)display_num(4,i*16,str_num,10);
input_string[length]=keycode; //將鍵值賦給input_string數組
p=T9PY(input_string,length+1); //查表,并且取得點陣表的地址
if(PY_num>0) //find為1表示找到了與輸入拼音匹配的漢字
{ //保存下此次的漢字點陣地址,一旦下次沒找到相匹配的漢字
temp=p; //則調用顯示最后匹配的漢字,否則將顯示亂碼
for(i=0;i<8;i++)display_h(4,i*16+5,T9PY_mb[0]->PY_mb,i); //顯示漢字
length++; //length用于記錄輸入字母的長度,每按一次鍵length的值加一
for(i=0;i<length;i++)
display_e(2,66+6*i,asc,*(p_py+i)-'a'); //顯示輸入的拼音,字母的點陣放在asc數組中
line_h(0,30,128);
page=0; //重新輸入拼音,page置為0,否則會出錯
}
else
{
for(i=0;i<8;i++)display_h(4,i*16+5,temp,i); //顯示漢字
}
}
if (ii==15&&(PY_num>0))
{
for(i=0;i<8;i++) display_h(4,i*16+5,str_1,4);//清屏
for(i=0;i<8;i++)display_num(4,i*16,str_num,10);
page++;
if(page==PY_num)page=0;
for(i=0;i<8;i++)display_h(4,i*16+5,T9PY_mb[page]->PY_mb,i); //顯示漢字
for(i=0;i<length;i++)
display_e(2,66+6*i,asc,*(T9PY_mb[page]->PY+i)-'a'); //顯示輸入的拼音,字母的點陣放在asc數組中
line_h(0,30,128);
}
if(ii==3&&length>0)//此鍵為選漢字鍵,當此鍵按下時會在每個漢字的左上角出現小的數字
{
for(i=0;i<8;i++)display_num(4,i*16,str_num,i);
cnt=1;
}
if(ii==12)//當按鍵為刪除鍵時
{
if (length>0)//當拼音長度大于0時
{
length--;
for(i=0;i<8;i++) display_h(4,i*16+5,str_1,4);//清屏
for(i=0;i<8;i++)display_num(4,i*16,str_num,10);
if(length>0)
{
p=T9PY(input_string,length);
for(i=0;i<8;i++)display_h(4,i*16+5,p,i);//顯示漢字
for(i=0;i<6;i++)display_e(2,66+6*i,asc,26);
for(i=0;i<length;i++)
display_e(2,66+6*i,asc,*(p_py+i)-'a');
}
else//當全部刪除時,指針P指向數組PY_mb_a
{
p=PY_mb_a;
for(i=0;i<8;i++)display_h(4,i*16+5,p,i);//顯示漢字
for(i=0;i<6;i++)display_e(2,66+6*i,asc,26);
}
line_h(0,30,128);
}
else if(length_h>0)
{
length_h--;
display_h(0,length_h*12,str_1,4);
display_h(0,(length_h+1)*12,str_1,4);
line_v(length_h*12,0,16);
}
}
}
}
else if(cnt==1)//選漢字狀態,輸入數字“0”-“7”,選擇相應的漢字
{
ii=key_ii();
if(ii!=0xff)
{
if(ii==0)keycode=7;
if(ii==4)keycode=4;
if(ii==5)keycode=5;
if(ii==6)keycode=6;
if(ii==8)keycode=1;
if(ii==9)keycode=2;
if(ii==10)keycode=3;
if(ii==13)keycode=0;
if(ii==0||ii==4||ii==5||ii==8||ii==6||ii==9||ii==10||ii==13)
{
if(length_h==10)
{
length_h=0;
for(i=0;i<10;i++)display_h(0,i*12,str_1,4);
display_e(0,120,asc,26);
}
display_h(0,length_h*12,T9PY_mb[page]->PY_mb,keycode);
//在AT24C64的0-255地址空間開辟一個緩存,用于存儲當前正在編輯的短信
mem=(unsigned int)(T9PY_mb[page]->PY_mb)+keycode*24;
do
{
IICWrite(length_h*2,mem&0xff);
//delay(200);
IICWrite(length_h*2+1,mem>>8);
//在此加入防錯程序,先把漢字點陣的地址寫入AT24C64,然后讀出直到相等時結束
//cmp=IICRead(2*length_h);
cmp=IICRead(2*length_h)+(IICRead(2*length_h+1)<<8);
//此處優先級一定要注意,“+”的優先級大于“<<”,所以后面的括號不要忘記了!
}while(mem!=cmp);
length_h++;
line_v(length_h*12,0,16);
//清屏
for(i=0;i<8;i++) display_h(4,i*16+5,str_1,4);
for(i=0;i<8;i++)display_num(4,i*16,str_num,10);
for(i=0;i<length;i++)display_e(2,66+6*i,asc,26);
line_h(0,30,128);
length=0;
cnt=0;
}//end if(ii==0||ii==4||ii==5||ii==8||ii==6||ii==9||ii==10||ii==13)
}//end if(ii!=0xff)
}
}//end while(1)
}//end main()
void screen_4()
{
uchar i,iii;
unsigned char code *p_mem;
init();
cls();
display_h(0,0,symbol,8);
for(i=0;i<2;i++)
{
p_mem=(uchar code *)(IICRead(2*i)+(IICRead(2*i+1)<<8));
//此處優先級一定要注意,“+”的優先級大于“<<”,所以后面的括號不要忘記了!
display_h(0,20+12*i,p_mem,0);
}
display_e(0,44,b_num,12);
display_e(0,50,b_num,1);
display_e(0,50+6,b_num,11);
display_e(0,50+12,asc,'t'-'a');
display_e(0,50+18,asc,'x'-'a');
display_e(0,50+24,asc,'t'-'a');
while(1)
{
iii=key();
if(iii==7)
{
state=1;
break;
}
}
}
/**************************************************************************************************
*
*主函數
*函數聲明:void main (void) ;
*函數參數:無
*函數作用:實現一個有限的狀態機
*
**************************************************************************************************/
void main ()
{
while(1)
{
if(state==0) screen_1();//歡迎界面
else if(state==1) screen_2();
else if(state==2) screen_3();//寫短信界面
else if(state==3) screen_4();//讀短信界面
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -