您的位置:首页 > 编程语言 > C语言/C++

stm32 编程的收获,有关C语言(在stm32 公交报站中的收获)

2016-04-06 01:15 405 查看
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.

绝对不要在中断中处理太多,不然上一次的中断还没有完,下一次的中断有可能就来了;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: