void init_12864_dis() //³õʼ»¯ÏÔʾ { cs1=1; //×óÆÁ¿ªÏÔʾ cs2=0; write_yhanzi(7,0,16,dzrl); //¶à¹¦Äܵç×ÓÈÕÀú write_yhanzi(2,2,0,yangli); //Ñô(0) Àú(1) write_yhanzi(2,4,0,nongli); //Å©(0) Àú(1) // write_yhanzi(2,6,0,0x00); //ʱ¼ä // write_yhanzi(2,6,0,shijian); //ʱ¼ä write_shu16(1*2,4*8,0x20,0); write_yhanzi(1,2,4*16,qita[0]); //Äê write_yhanzi(1,2,6*16,qita[1]); //Ô write_yhanzi(2,4,5*16,qita[6]); //ÐÇÆÚ dis_shijian(); //ÏÔʾʱ¼ä write_yhanzi(1,6,7*16,wendu_fuhao); //¡æ }解释
时间: 2024-01-18 17:03:10 浏览: 58
这是一个初始化LCD显示屏的函数。在函数中,首先对左侧显示屏进行初始化,将cs1设置为1,表示选择左侧显示屏,然后在屏幕上显示电子日历和阳历/农历的标题。接着,在右侧显示屏进行初始化,将cs2设置为0,表示选择右侧显示屏。在右侧显示屏上显示其他信息,如年、月、日、星期、温度等。其中,write_yhanzi()函数用于在LCD上显示汉字,参数中的数字表示汉字在LCD中的位置和大小。write_shu16()函数用于在LCD上显示16x16像素的数字和符号。最后,调用了dis_shijian()函数显示时间信息。
相关问题
int main(void) { const unsigned char *point; u16 i=0; delay_init(); //ÑÓʱº¯Êý³õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃÖжÏÓÅÏȼ¶·Ö×éΪ×é2£º2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶ // uart_init(115200); //´®¿Ú³õʼ»¯Îª115200 LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú // KEY_Init(); //°´¼ü³õʼ»¯ AT24CXX_Init(); //IIC³õʼ»¯ OLED_init(); point= &picture_tab[0]; TIM_OCInitTypeDef TIM_OCInitStructure; delay_init(); //ÑÓʱº¯Êý³õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶ uart_init(115200); //´®¿Ú³õʼ»¯Îª115200 LED_Init(); //LED¶Ë¿Ú³õʼ»¯ TIM3_Int_Init(4999,7199);//10KhzµÄ¼ÆÊýƵÂÊ£¬¼ÆÊýµ½5000Ϊ500ms TIM4_PWM_Init(10000-1,72-1); //72M/72=1MHz¼ÆÊýƵÂÊ,ÖØ×°ÔØÖµ while(1) { OLED_ShowString(0,30,"21221054",16); OLED_ShowString(0,15,"2023/5/18",16); OLED_ShowChinese(0,0,0,16,1); OLED_ShowChinese(16,0,1,16,1); OLED_ShowChinese(32,0,2,16,1); delay_ms(1000); OLED_Refresh_Gram(); //¸üÐÂÏÔʾµ½OLED if(++i > 3) { LED1=!LED1;//ÌáʾϵͳÕýÔÚÔËÐÐ i=0; } while(1) { u16 u16tmp; u16tmp += 500; if(u16tmp > 10000) u16tmp=0; //³õʼ»¯TIM4 Channe3 PWMģʽ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //Ñ¡Ôñ¶¨Ê±Æ÷ģʽ:TIMÂö³å¿í¶Èµ÷ÖÆģʽ2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±È½ÏÊä³öʹÄÜ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //Êä³ö¼«ÐÔ:TIMÊä³ö±È½Ï¼«ÐÔ¸ß TIM_OCInitStructure.TIM_Pulse = u16tmp; TIM_OC3Init(TIM4, &TIM_OCInitStructure); //¸ù¾ÝTÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèTIM4 OC3 LED2=!LED2; //LED3=!LED3; delay_ms(300); } } }这段代码问题如下:declaration may not appear after executable statement inblock,TIM OCINITTYPEDEF TIM OCINITSTRUCTURE,请修改这个问题
这个错误是因为在 `while` 循环中,变量 `TIM_OCInitStructure` 的声明出现在了可执行语句之后。这是不允许的,因为C语言规定变量声明必须在可执行语句之前。
要解决这个问题,你需要将变量 `TIM_OCInitStructure` 的声明语句移到可执行语句之前,或者将可执行语句移到声明语句之后。例如:
```
while(1)
{
TIM_OCInitTypeDef TIM_OCInitStructure; // 变量声明放在可执行语句之前
u16 u16tmp;
u16tmp += 500;
if(u16tmp > 10000) u16tmp=0;
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_Pulse = u16tmp;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
LED2=!LED2;
delay_ms(300);
}
```
另外,你的代码中有一些重复的语句,比如 `delay_init()` 和 `NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2)`,可以将它们删除掉。
void main() { u8 i=0; int temp_value; u8 temp_buf[5]; ds18b20_init();//³õʼ»¯DS18B20 while(1) { i++; if(i%50==0)//¼ä¸ôÒ»¶Îʱ¼ä¶ÁȡζÈÖµ£¬¼ä¸ôʱ¼äÒª´óÓÚζȴ«¸ÐÆ÷ת»»Î¶Èʱ¼ä temp_value=ds18b20_read_temperture()*10;//±£ÁôζÈֵСÊýºóһλ if(temp_value<0)//¸ºÎÂ¶È { temp_value=-temp_value; temp_buf[0]=0x40;//ÏÔʾ¸ººÅ } else temp_buf[0]=0x00;//²»ÏÔʾ temp_buf[1]=gsmg_code[temp_value/1000];//°Ùλ temp_buf[2]=gsmg_code[temp_value%1000/100];//ʮλ temp_buf[3]=gsmg_code[temp_value%1000%100/10]|0x80;//¸öλ+СÊýµã temp_buf[4]=gsmg_code[temp_value%1000%100%10];//СÊýµãºóһλ smg_display(temp_buf,4); } }在代码中加入蜂鸣器报警
好的,你可以在代码中加入以下代码段,就可以实现蜂鸣器报警功能了:
```
if(temp_value >= 300) // 如果温度超过 30 度
{
BEEP = 0; // 蜂鸣器响
}
else
{
BEEP = 1; // 蜂鸣器不响
}
```
完整代码如下:
```
void main()
{
u8 i=0;
int temp_value;
u8 temp_buf[5];
ds18b20_init();//³õʼ»¯DS18B20
while(1)
{
i++;
if(i%50==0)//¼ä¸ôÒ»¶Îʱ¼ä¶ÁȡζÈÖµ£¬¼ä¸ôʱ¼äÒª´óÓÚζȴ«¸ÐÆ÷ת»»Î¶Èʱ¼ä
{
temp_value=ds18b20_read_temperture()*10;//±£ÁôζÈֵСÊýºóһλ
if(temp_value<0)//¸ºÎ¶È
{
temp_value=-temp_value;
temp_buf[0]=0x40;//ÏÔʾ¸ººÅ
}
else
temp_buf[0]=0x00;//²»ÏÔʾ
temp_buf[1]=gsmg_code[temp_value/1000];//°Ùλ
temp_buf[2]=gsmg_code[temp_value%1000/100];//ʮλ
temp_buf[3]=gsmg_code[temp_value%1000%100/10]|0x80;//¸öλ+СÊýµã
temp_buf[4]=gsmg_code[temp_value%1000%100%10];//СÊýµãºóһλ
smg_display(temp_buf,4);
if(temp_value >= 300) // 如果温度超过 30 度
{
BEEP = 0; // 蜂鸣器响
}
else
{
BEEP = 1; // 蜂鸣器不响
}
}
}
}
```
阅读全文