stm32 编程的收获,有关C语言(在stm32 公交报站中的收获)
2016-04-06 01:15
429 查看
1.
char * msg[MSG_NUM] = { //以下内容请自行修改
{"乘客您好,欢迎乘坐"},
{"[n1]2[n0]路"}, //车次,采用单个数字变读(1读作幺)模式,读后恢复正常模式
{"公交车,本路车由"},
{"开往"},
{",前门上车,后门下车,本车无人售票,请自备零钱"},
{"车辆起动,请站稳扶好"},
{"[2]车辆转弯,请注意安全"},
{"前方到站"},
{"下车的乘客后门请"},
{"车站到了,请您带好随身物品,从后门下车,谢谢您的乘坐,再见"},
{"始发站"},
{"终点站"},
{"soundk"},
{"到了"}
};
在字符串的定义的时候用指针;
调用的时候
void syn6288_SpeakStr(char *text,char MusicID)
例如 syn6288_SpeakStr(msg[12],0);
2.
u8 * sta[STA_NUM] = {
{"XXXX"},
{"XXXX"},
{"XXXX"},
{"XXXX"},
{"XXXX"},
{"XXXX},
{"XXXX"},
};
调用的时候
如果 syn6288_SpeakStr(sta[0],0);
会报警告
main.c(96): warning: #167-D: argument of type "u8 *" is incompatible with parameter of type "char *"
这样就不会报告了syn6288_SpeakStr((u8*)sta[0],0);
3.结构体数组
typedef struct
{
unsigned char Index[2];
char Msk[32];
}typFNT_GB16;
const typFNT_GB16 tfont16[]=
{
"公",0x00,0x80,0x04,0x80,0x04,0x80,0x08,0x40,0x08,0x40,0x10,0x20,0x20,0x10,0x42,0x08,
0x82,0x06,0x04,0x00,0x04,0x40,0x08,0x20,0x10,0x20,0x3F,0xF0,0x10,0x10,0x00,0x00,/*0*/
"交",0x02,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x10,0x10,0x10,0x08,0x20,0x24,
0x48,0x24,0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x0C,0x40,0x30,0x30,0xC0,0x0E,/*1*/
"报",0x10,0x00,0x11,0xFC,0x11,0x04,0x11,0x04,0xFD,0x14,0x11,0x08,0x11,0x00,0x15,0xFC,
0x19,0x44,0x31,0x44,0xD1,0x28,0x11,0x28,0x11,0x10,0x11,0x28,0x51,0x44,0x21,0x82,/*2*/
"站",0x10,0x20,0x08,0x20,0x08,0x20,0x7E,0x20,0x00,0x3E,0x04,0x20,0x44,0x20,0x44,0x20,
0x25,0xFC,0x29,0x04,0x29,0x04,0x0F,0x04,0xF1,0x04,0x41,0x04,0x01,0xFC,0x01,0x04,/*3*/
"℃",0xC0,0x00,0x23,0xE8,0x2C,0x18,0xD8,0x08,0x10,0x08,0x30,0x00,0x30,0x00,0x30,0x00,
0x30,0x00,0x30,0x00,0x30,0x00,0x10,0x00,0x18,0x08,0x0C,0x10,0x03,0xE0,0x00,0x00,/*0*/
}
自动统计汉字数目 HZnum=sizeof(tfont16)/sizeof(typFNT_GB16);
//******************************************************************
//功能: 显示单个16X16中文字体
//输入参数:x,y :起点坐标
// fc:前置画笔颜色
// bc:背景颜色
// s:字符串地址
// mode:模式
0,填充模式;1,叠加模式
//返回值: 无
//修改记录:无
//******************************************************************
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
{
u8 i,j;
u16 k;
u16 HZnum;
u16 x0=x;
HZnum=sizeof(tfont16)/sizeof(typFNT_GB16);
//自动统计汉字数目
for (k=0;k<HZnum;k++)
{
if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1))) //比如要取交的话 K=1,
{ LCD_SetWindows(x,y,x+16-1,y+16-1);
for(i=0;i<16*2;i++)
{
for(j=0;j<8;j++)
{
if(!mode) //非叠加方式
{
if(tfont16[k].Msk[i]&(0x80>>j))
LCD_WR_DATA_16Bit(fc);
else LCD_WR_DATA_16Bit(bc);
}
else
{
POINT_COLOR=fc;
if(tfont16[k].Msk[i]&(0x80>>j))
LCD_DrawPoint(x,y);//画一个点
x++;
if((x-x0)==16)
{
x=x0;
y++;
break;
}
}
}
}
}
continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
}
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏
}
if(tfont16[k].Msk[i]&(0x80>>j))
LCD_DrawPoint(x,y);//画一个点
通过移位来判断是否画点;
4,
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
printf 必备的;
5.
Rct6 是256 k 的flash 要选择HD的 下载时候
6.
绝对不要在中断中处理太多,不然上一次的中断还没有完,下一次的中断有可能就来了;
char * msg[MSG_NUM] = { //以下内容请自行修改
{"乘客您好,欢迎乘坐"},
{"[n1]2[n0]路"}, //车次,采用单个数字变读(1读作幺)模式,读后恢复正常模式
{"公交车,本路车由"},
{"开往"},
{",前门上车,后门下车,本车无人售票,请自备零钱"},
{"车辆起动,请站稳扶好"},
{"[2]车辆转弯,请注意安全"},
{"前方到站"},
{"下车的乘客后门请"},
{"车站到了,请您带好随身物品,从后门下车,谢谢您的乘坐,再见"},
{"始发站"},
{"终点站"},
{"soundk"},
{"到了"}
};
在字符串的定义的时候用指针;
调用的时候
void syn6288_SpeakStr(char *text,char MusicID)
例如 syn6288_SpeakStr(msg[12],0);
2.
u8 * sta[STA_NUM] = {
{"XXXX"},
{"XXXX"},
{"XXXX"},
{"XXXX"},
{"XXXX"},
{"XXXX},
{"XXXX"},
};
调用的时候
如果 syn6288_SpeakStr(sta[0],0);
会报警告
main.c(96): warning: #167-D: argument of type "u8 *" is incompatible with parameter of type "char *"
这样就不会报告了syn6288_SpeakStr((u8*)sta[0],0);
3.结构体数组
typedef struct
{
unsigned char Index[2];
char Msk[32];
}typFNT_GB16;
const typFNT_GB16 tfont16[]=
{
"公",0x00,0x80,0x04,0x80,0x04,0x80,0x08,0x40,0x08,0x40,0x10,0x20,0x20,0x10,0x42,0x08,
0x82,0x06,0x04,0x00,0x04,0x40,0x08,0x20,0x10,0x20,0x3F,0xF0,0x10,0x10,0x00,0x00,/*0*/
"交",0x02,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x10,0x10,0x10,0x08,0x20,0x24,
0x48,0x24,0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x0C,0x40,0x30,0x30,0xC0,0x0E,/*1*/
"报",0x10,0x00,0x11,0xFC,0x11,0x04,0x11,0x04,0xFD,0x14,0x11,0x08,0x11,0x00,0x15,0xFC,
0x19,0x44,0x31,0x44,0xD1,0x28,0x11,0x28,0x11,0x10,0x11,0x28,0x51,0x44,0x21,0x82,/*2*/
"站",0x10,0x20,0x08,0x20,0x08,0x20,0x7E,0x20,0x00,0x3E,0x04,0x20,0x44,0x20,0x44,0x20,
0x25,0xFC,0x29,0x04,0x29,0x04,0x0F,0x04,0xF1,0x04,0x41,0x04,0x01,0xFC,0x01,0x04,/*3*/
"℃",0xC0,0x00,0x23,0xE8,0x2C,0x18,0xD8,0x08,0x10,0x08,0x30,0x00,0x30,0x00,0x30,0x00,
0x30,0x00,0x30,0x00,0x30,0x00,0x10,0x00,0x18,0x08,0x0C,0x10,0x03,0xE0,0x00,0x00,/*0*/
}
自动统计汉字数目 HZnum=sizeof(tfont16)/sizeof(typFNT_GB16);
//******************************************************************
//功能: 显示单个16X16中文字体
//输入参数:x,y :起点坐标
// fc:前置画笔颜色
// bc:背景颜色
// s:字符串地址
// mode:模式
0,填充模式;1,叠加模式
//返回值: 无
//修改记录:无
//******************************************************************
void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
{
u8 i,j;
u16 k;
u16 HZnum;
u16 x0=x;
HZnum=sizeof(tfont16)/sizeof(typFNT_GB16);
//自动统计汉字数目
for (k=0;k<HZnum;k++)
{
if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1))) //比如要取交的话 K=1,
{ LCD_SetWindows(x,y,x+16-1,y+16-1);
for(i=0;i<16*2;i++)
{
for(j=0;j<8;j++)
{
if(!mode) //非叠加方式
{
if(tfont16[k].Msk[i]&(0x80>>j))
LCD_WR_DATA_16Bit(fc);
else LCD_WR_DATA_16Bit(bc);
}
else
{
POINT_COLOR=fc;
if(tfont16[k].Msk[i]&(0x80>>j))
LCD_DrawPoint(x,y);//画一个点
x++;
if((x-x0)==16)
{
x=x0;
y++;
break;
}
}
}
}
}
continue; //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
}
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏
}
if(tfont16[k].Msk[i]&(0x80>>j))
LCD_DrawPoint(x,y);//画一个点
通过移位来判断是否画点;
4,
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
printf 必备的;
5.
Rct6 是256 k 的flash 要选择HD的 下载时候
6.
绝对不要在中断中处理太多,不然上一次的中断还没有完,下一次的中断有可能就来了;
相关文章推荐
- C/C++面试题总结(1)
- 关于汉诺塔问题
- 易被遗忘的C/C++要点总结
- C++ 模板(一)
- C++模板(二)
- Effective C++: typedef & using
- C++中Lambda函数
- C++嵌套类与局部类详细解析
- C++实现堆栈
- C/C++中的转义字符
- C++ 值传递、指针传递、引用传递
- 合并两个已序单链表
- C++实验3-个人所得税计算器
- keil:C语言里面调用汇编程序
- C语言头文件的使用(转载)
- 数字与字母乱序输入a34b56c7777d8,数字在前字母在后输出345677778abcd
- C语言实现继承和多态
- 问题 N: C/C++经典程序训练2---斐波那契(Fibonacci)数列
- C语言printf()函数:格式化输出函数
- C语言printf()函数:格式化输出函数