📄 main.c
字号:
/**************************************************************************************************
用大于32K的芯片烧写
主程序
**************************************************************************************************/
void main(void)
{
uchar data i,j,c,m,n; //第i个拼音串,第j个汉字,拼音串个数m,状态栏字符总数n
uchar data page,virtual_screen; //取液晶字库中哪页汉字,编辑区翻到那一屏/页
uchar data * numbers_p; //输入拼音时指向数字串的指针
uchar data numbers[7]; //键盘输入的数字串
uchar data pinyin_buf[6][7]; //从液晶取回的拼音串
//----------------------------------------------------------------------------------------
//编辑缓存
uchar idata hanzi_buf[21]; //从液晶取回的10个汉字的内码缓存
uchar idata * save_p; //编辑区写入字符的位置
uchar idata save_buf[50]="见网友了吧,美女变成大头鬼了吧?";
uchar code bd_bj[bj_len]="!\"#$%&'()*+,-./:;<=>?@^_`{|}~[\\]";
uchar code bd_qj[qj_len]="αβγδεζηθικλμνξοπρστυφχψω←";
//----------------------------------------------------------------------------------------
serial_init();
delay();
delay();
delay();
lcd_light(0x25);
option:
lcd_showcursor(0);//暂时关闭光标
lcd_cls();
lcd_string(0,"功能:1.测试\t4.查看\n\t\t\t\t\t2.编辑\t5.删除\n\t\t\t\t\t3.演示\t6.亮度");
//lcd_string(0,"5.删除\n\t\t\t\t\t\t3.演示\t6.亮度\n\t\t\t\t\t\t7.发送");
c=getchar();
lcd_cls();
if(c=='1')goto test_option;
if(c=='2')goto edit_option;
if(c=='3')goto demo_option;
if(c=='4')goto view_option;
if(c=='5')goto delete_option;
if(c=='6')goto light_option;
//if(c=='7')goto send_option;
else goto option;
light_option:
i=0x25;
light_cycle:
lcd_cursor(0,0);
lcd_string(0,"1.加亮\t2.变暗\t\n3.全黑\t4.全亮");
c=getchar();
if(c==0x0d)goto option;
if(c=='3')i=63;
else if(c=='4')i=0;
else if(c=='1')
{
if(i<64)
i++;
}
else if(c=='2')
{
if(i)
i--;
}
lcd_light(i);
goto light_cycle;
/*********************************************************
1.测试键盘的好坏
*********************************************************/
test_option:
lcd_showcursor(0);//暂时关闭光标
lcd_cls();
while(1)
{
lcd_cursor(0,0);
lcd_string(0,"键盘测试,请按键:");
lcd_string(0,"");
c=getchar();
lcd_cursor(0,2);
lcd_string(0,"输入的是 ");
if(c>(0x2F)&&(c<0x3A))
{
lcd_byte(0,c);
lcd_string(0," ");
}
else if(c=='e') lcd_string(0,"前移");
else if(c=='d') lcd_string(0,"后移");
else if(c=='s') lcd_string(0,"上页");
else if(c=='f') lcd_string(0,"下页");
else if(c==0x0d)
{
lcd_string(0,"确定");
lcd_string(0,"\n\n按 取消 退出!");
repeat_enter: c=getchar();
if(c==0x08)
goto option;
else
goto repeat_enter;
}
else if(c==0x08)
{
lcd_string(0,"取消");
lcd_string(0,"\n\n按 确定 退出!");
repeat_esc: c=getchar();
if(c==0x0d)goto option;
else
goto repeat_esc;
}
else
{
lcd_cursor(0,2);
lcd_string(0,"其它键盘输入!\n\n");
lcd_string(0,"1.退出 2.继续");
c=getchar();
if(c=='1')goto option;
lcd_cls();
}
}
/*********************************************************
3.数字取拼音、汉字的演示,没有安排按键中断,
所以只有按复位或等待循环255次退出
**********************************************************/
demo_option:
lcd_showcursor(0);//暂时关闭光标
numbers[0]='7';
numbers[1]='4';
numbers[2]='2';
numbers[3]='6';
numbers[4]='0';
while(1)
{
lcd_cls();
lcd_string(0,"这是数字键7426输入取拼音、汉字的演示:");
lcd_num2pinyin(numbers,pinyin_buf);//取拼音
//参数:反显拼音位置,汉字是否反显及位置 汉字页码
for(i=0;i<=5;i++)
{
//第i个拼音反显选择
pinyin_display(i,6,pinyin_buf);//显示拼音
page=1;
for(;page<=2;page++)
{
n=lcd_pinyin2hz(page,pinyin_buf[i],hanzi_buf);//取汉字
for(j=1;j<=10;j++)//选择第j个汉字,j=0不选择
{
hanzi_display(j,hanzi_buf);//显示汉字
if(j==n)j=10;
}
}
}
lcd_cls();
lcd_string(0,"演示完毕! 1.退出\n\t\t\t\t\t\t\t\t\t\t2.继续 ");
c=getchar();
if(c=='1')
goto option;
}
/*********************************************************
4.查看短消息
**********************************************************/
view_option:
save_p=save_buf;
virtual_screen=0;
screen_display(save_p,virtual_screen,save_buf);
view_cycle:
c=getchar();
if((c=='s')||(c=='e'))
{
if(virtual_screen>0)
virtual_screen--;
if(virtual_screen==0)save_p=save_buf;
if(virtual_screen==1)save_p=save_buf+36;
}
else if((c=='f')||(c=='d'))
{
if(virtual_screen<2)
virtual_screen++;
if(virtual_screen==1)save_p=save_buf+36;
if(virtual_screen==2)save_p=save_buf+72;
}
else if(c==0x0d||c==0x08)
goto option;
screen_display(save_p,virtual_screen,save_buf);
goto view_cycle;
/*********************************************************
5.删除短消息
**********************************************************/
delete_option:
lcd_cls();
lcd_string(0,"要删除吗(Enter/Esc)?");
lcd_cursor(0,2);
c=getchar();
if(c==0x0d)
{
for(i=0;i<50;i++)
save_buf[i]='\0';
lcd_string(0,"编辑内容已删除!");
}
else
lcd_string(0,"无操作,任意键返回");
getchar();
goto option;
/*********************************************************
6.发送短消息
**********************************************************/
/*
send_option:
c++;;//ch1++;
send_cycle:
lcd_cls();
getchar();
lcd_string(0,"暂无此功能!请返回");
getchar();
lcd_cursor(0,0);
lcd_string(0,"暂无此功能!请返回");
c=getchar();
if((c==0x0d)||(c==0x08))
goto option;
else
goto send_cycle;
*/
/*********************************************************
2.编辑对话模块
**********************************************************/
edit_option:
//getchar();//分步测试
lcd_cls();
//-------------------------------------------------------------
i = 0;
j = 0;
page=1;
numbers_p=numbers;
virtual_screen=0;
save_p=save_buf;
while(*save_p!='\0')save_p++;
chinese_input_state = 1;
english_input_state = 0;
numbers_input_state = 0;
edit_5_state = 0;//全角特殊符号输入
edit_4_state = 0;//标点符号待选择
edit_3_state = 0;//插入字符
edit_2_state = 0;//编辑2状态
edit_1_state = 0;//编辑1状态
edit_0_state = 1;//编辑0状态
//-------------------------------------------------------------
virtual_screen=which_screen(save_p,save_buf);
//getchar();//分步测试
//-------------------------------------------------------------
while(1)
{
//------------------------------------------------------------------
wait_for_input:
lcd_showcursor(0);//暂时关闭光标
//------------------------------------------------------------------
//输入法状态提示
lcd_cursor(16,2);
if(chinese_input_state)
lcd_string(0,"拼音");
else if(english_input_state)
lcd_string(0,"英文");
else if(numbers_input_state)
lcd_string(0,"数字");
//------------------------------------------------------------------
//闪烁编辑区光标
//刷新编辑区显示
screen_display(save_p,virtual_screen,save_buf);
//------------------------------------------------------------------
c = getchar();//从键盘接受一个字符
lcd_showcursor(0);//暂时关闭光标
//------------------------------------------------------------------
if((c>0x2F)&&(c<0x40))//按键是数字键0~9时,对数字键的综合处理
//这样switch(c)里就少写了很多代码
{
//----------------------------------------------------------
//对数字键0、1提前综合处理
if(edit_2_state)//数字选汉字(英文),标点符号的状态
{
if(!numbers_input_state)//拼音,英文输入状态
{
if(j==(c-0x30)||(c=='0'&&j==10))//重复选择相当于按回车
goto enter_input_proceess1;
if(c>0x30)
j=c-0x30;//改变选择
if(c==0x30)
j=10;//按0表示选择第10个
if(j>n) //n为当前获得的汉字(英文)总数
j=1;//修正数字选汉字(英文)时可能产生的错误
goto display_process3;//状态栏汉字(英文),标点符号显示处理
}
}
if(edit_0_state)
{
if(numbers_input_state)//数字输入的处理,直接保存数字
{
save_number_process: hanzi_buf[0]= c;
save_p = edit_save_send0(1,save_p,hanzi_buf,save_buf);//保存数字
virtual_screen=which_screen(save_p,save_buf);
goto wait_for_input;
}
}
}
//------------------------------------------------------------------
switch(c)
{
case '0':
// 键值0 在中文、英文输入发状态时为空格键
//在编辑区光标向后移动一个字母的距离,编辑存储区添加一个'空格'字符
if(edit_0_state)
if(!numbers_input_state)
{
c=0x20;
goto save_number_process;//直接保存空格
}
goto wait_for_input;//此句会不会执行待测试
//------------------------------------------------------------------
case '1':
// 键值1 在中文、英文输入状态时为标点符号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -