#include "lcd12864bu.h" /******************ÏÔʾʱ¼äº¯Êý***************************/ void dis_shijian() //ÏÔʾʱ¼ä { write_shu16(3*2,1*8,shi,0); write_shuzi(1,3*2,3*8,fuhao[1],0); write_shu16(3*2,4*8,fen,0); write_shuzi(1,3*2,6*8,fuhao[1],0); write_shu16(3*2,7*8,miao,0); write_shu16(1*2,6*8,nian,0); write_shu16(1*2,10*8,yue,0); write_shu16(1*2,14*8,ri,0); write_shu16(2*2,4*8,n_yue,0); write_shuzi(1,2*2,6*8,fuhao[0],0); write_shu16(2*2,7*8,n_ri,0); if(week==0)//ÐÇÆÚÈÕ { write_yhanzi(1,4,7*16,xingqi[0]); } if(week==1)//ÐÇÆÚ1 { write_yhanzi(1,4,7*16,xingqi[1]); } if(week==2)//ÐÇÆÚ2 { write_yhanzi(1,4,7*16,xingqi[2]); } if(week==3)//ÐÇÆÚ3 { write_yhanzi(1,4,7*16,xingqi[3]); } if(week==4)//ÐÇÆÚ4 { write_yhanzi(1,4,7*16,xingqi[4]); } if(week==5)//ÐÇÆÚ5 { write_yhanzi(1,4,7*16,xingqi[5]); } if(week==6)//ÐÇÆÚ6 { write_yhanzi(1,4,7*16,xingqi[6]); } if(week==7) { week=0; write_yhanzi(1,4,7*16,xingqi[0]); } write_shu18b20(3*2,10*8,temperature,0); write_shuzi(1,3*2,12*8,dian,0); }解释一下
时间: 2023-07-23 17:37:04 浏览: 58
这是一个显示时间和温度的函数。其中,调用了lcd12864bu.h库文件中的函数。dis_shijian()函数的具体功能是:显示小时、分钟、秒、年、月、日、星期、温度等信息。函数中的各个参数代表的含义如下:shi表示小时,fen表示分钟,miao表示秒,nian表示年,yue表示月,ri表示日,n_yue表示农历月份,n_ri表示农历日,week表示星期几,temperature表示温度。函数中的write_shu16()、write_shuzi()、write_yhanzi()和write_shu18b20()等函数都是在lcd12864bu.h库文件中定义的用于操作LCD显示屏的函数。其中,write_shu16()、write_shuzi()、write_yhanzi()和write_shu18b20()函数分别用于在LCD上显示16x16像素的汉字、8x16像素的数字、16x16像素的汉字和18x20像素的数字。函数中的0参数表示不需要反白显示。
相关问题
#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" //#include "oled.h" #include "24cxx.h" #include "OLED4PINiic.h"const u8 TEXT_Buffer[]={"Explorer STM32F4 IIC TEST"}; #define SIZE sizeof(TEXT_Buffer) 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]; 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); OLED_Refresh_Gram(); //¸üÐÂÏÔʾµ½OLED delay_ms(100); if(++i > 3) { LED1=!LED1;//ÌáʾϵͳÕýÔÚÔËÐÐ i=0; } } }请在此函数的基础上,编写程序使得字体从左到右滚动显示
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
//#include "oled.h"
#include "24cxx.h"
#include "OLED4PINiic.h"
const u8 TEXT_Buffer[]={"Explorer STM32F4 IIC TEST"};
#define SIZE sizeof(TEXT_Buffer)
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];
while(1)
{
for(u8 j=0;j<SIZE;j++)
{
OLED_Clear();
OLED_ShowString(j*16,30,&TEXT_Buffer[j],16);
OLED_Refresh_Gram(); //¸üÐÂÏÔʾµ½OLED
delay_ms(100);
}
if(++i > 3)
{
LED1=!LED1;//ÌáʾϵͳÕýÔÚÔËÐÐ
i=0;
}
}
}
在while循环中,添加一个for循环,用于控制字体从左到右滚动。首先需要清屏,然后通过OLED_ShowString()函数控制字体显示位置,最后通过OLED_Refresh_Gram()函数刷新OLED。循环次数为字符串长度,每次循环将字符串向右移动一个字符的长度。
#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include "adc.h" int main(void) { float voltage = 0.0f; u16 adcx; //float temp; delay_init(); //ÑÓʱº¯Êý³õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃÖжÏÓÅÏȼ¶·Ö×éΪ×é2£º2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶ uart_init(115200); //´®¿Ú³õʼ»¯Îª115200 LED_Init(); //LED¶Ë¿Ú³õʼ»¯ LCD_Init(); Adc_Init(); //ADC³õʼ»¯ while(1) { adcx=Get_Adc_Average(ADC_Channel_1,10); printf("adc:%d\r\n",adcx);//ÏÔʾADCµÄÖµ voltage = adcx * 3.3 / 4096; printf("v:%f\r",voltage);//ÏÔʾµçѹֵ LED0=!LED0; delay_ms(500); } }
这是一段STM32F407单片机的代码,实现了ADC采集电压并通过串口发送到电脑上,同时LED0闪烁。具体流程如下:
1. 引入相关头文件
2. 初始化延时函数
3. 设置中断分组为2,即2位抢占优先级,2位子优先级
4. 初始化串口,波特率为115200
5. 初始化LED
6. 初始化LCD
7. 初始化ADC
8. 进入主程序循环
9. 通过ADC_Channel_1通道采集电压值,并取10次平均值
10. 将采集的ADC数值通过串口发送到电脑上
11. 将ADC数值转换成电压值,并通过串口发送到电脑上
12. LED0闪烁,间隔500ms