if (scroll_dir == 0){ scroll_pos++; if (scroll_pos + 8 >= SIZE) { scroll_dir = 1; scroll_pos = SIZE - 8; }}else{ scroll_pos--; if (scroll_pos == 0) { scroll_dir = 0; scroll_pos = 0; }}具体解释每句代码的意思
时间: 2023-12-26 18:03:35 浏览: 27
这段代码是一个简单的循环滚动屏幕的程序,下面是每句代码的解释:
```if (scroll_dir == 0)```:如果滚动方向为0,也就是向上滚动。
```scroll_pos++;```:向上滚动一行,即滚动位置向下移动。
```if (scroll_pos + 8 >= SIZE)```:如果滚动位置加上屏幕高度等于屏幕大小,也就是显示到了底部。
```scroll_dir = 1;```:更改滚动方向为1,也就是向下滚动。
```scroll_pos = SIZE - 8;```:滚动位置移动到屏幕底部减去8个字符的位置,因为接下来要向下滚动。
```else```:如果滚动方向为1,也就是向下滚动。
```scroll_pos--;```:向下滚动一行,即滚动位置向上移动。
```if (scroll_pos == 0)```:如果滚动位置等于0,也就是显示到了顶部。
```scroll_dir = 0;```:更改滚动方向为0,也就是向上滚动。
```scroll_pos = 0;```:滚动位置移动到顶部。
相关问题
#define SCROLL_SPEED 100 int scroll_dir = 0; int scroll_pos = 0; while(1) { OLED_Clear(); 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); for(j=0;j<8;j++) { OLED_ShowChinese( 128+j * 16, 0, point[scroll_pos + j], 16, 1); } OLED_Refresh_Gram(); delay_ms(SCROLL_SPEED); if (scroll_dir == 0) { scroll_pos++; if (scroll_pos + 8 >= SIZE) { scroll_dir = 1; scroll_pos = SIZE - 8; } } else { scroll_pos--; if (scroll_pos == 0) { scroll_dir = 0; scroll_pos = 0; } } delay_ms(1000);详细解释每句代码的意思
这是一段使用 OLED 显示屏进行滚动显示的代码,下面逐行解释每个语句的含义:
1. `#define SCROLL_SPEED 100`:定义一个常量 SCROLL_SPEED,它的值为 100。
2. `int scroll_dir = 0;`:定义一个整型变量 scroll_dir,并初始化为 0。
3. `int scroll_pos = 0;`:定义一个整型变量 scroll_pos,并初始化为 0。
4. `while(1)`:进入一个无限循环。
5. `OLED_Clear();`:清空 OLED 显示屏上的内容。
6. `OLED_ShowString(0,30,"21221054",16);`:在 OLED 显示屏的第一行第 30 列开始显示字符串 "21221054",字符大小为 16。
7. `OLED_ShowString(0,15,"2023/5/18",16);`:在 OLED 显示屏的第一行第 15 列开始显示字符串 "2023/5/18",字符大小为 16。
8. `OLED_ShowChinese(0,0,0,16,1);`:在 OLED 显示屏的第一行第一列开始显示一个汉字,该汉字是在字库中的第 0 个位置,字符大小为 16。
9. `OLED_ShowChinese(16,0,1,16,1);`:在 OLED 显示屏的第一行第二列开始显示一个汉字,该汉字是在字库中的第 1 个位置,字符大小为 16。
10. `OLED_ShowChinese(32,0,2,16,1);`:在 OLED 显示屏的第一行第三列开始显示一个汉字,该汉字是在字库中的第 2 个位置,字符大小为 16。
11. `for(j=0;j<8;j++)`:进入一个循环,循环次数为 8。
12. `OLED_ShowChinese(128+j * 16, 0, point[scroll_pos + j], 16, 1);`:在 OLED 显示屏的第一行开始显示一个汉字,该汉字是 point 数组中从 scroll_pos 开始的第 j 个元素,字符大小为 16。其中,128+j*16 表示每个汉字所占的像素宽度为 16,因此每个汉字之间相隔 16 个像素。
13. `OLED_Refresh_Gram();`:更新 OLED 显示屏的显存,将最新的内容显示在屏幕上。
14. `delay_ms(SCROLL_SPEED);`:延时 SCROLL_SPEED 毫秒。
15. `if (scroll_dir == 0)`:如果 scroll_dir 的值为 0,即向右滚动。
16. `scroll_pos++;`:滚动位置加 1。
17. `if (scroll_pos + 8 >= SIZE)`:如果滚动位置加上 8 大于等于 SIZE,即已经滚动到末尾。
18. `scroll_dir = 1;`:改变滚动方向为向左。
19. `scroll_pos = SIZE - 8;`:将滚动位置调整到末尾前 8 个位置处。
20. `else`:如果滚动位置加上 8 小于 SIZE,即还没有滚动到末尾。
21. `scroll_pos--;`:滚动位置减 1。
22. `if (scroll_pos == 0)`:如果滚动位置已经回到起始位置。
23. `scroll_dir = 0;`:改变滚动方向为向右。
24. `scroll_pos = 0;`:将滚动位置重置为 0。
25. `delay_ms(1000);`:延时 1000 毫秒,即每隔 1 秒钟滚动一次。
def show_excel(self): # 清空第一个表格内容 self.result_text.delete(1.0, tk.END) # 清空第二个表格内容 if hasattr(self, 'table_frame2'): self.table_frame2.destroy() self.table_frame2 = tk.Frame(self.result_text2) self.table_frame2.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) table_scroll_y2 = ttk.Scrollbar(self.table_frame2, orient=tk.VERTICAL) table_scroll_y2.pack(side=tk.RIGHT, fill=tk.Y) table_scroll_x2 = ttk.Scrollbar(self.table_frame2, orient=tk.HORIZONTAL) table_scroll_x2.pack(side=tk.BOTTOM, fill=tk.X) # 清空第二个表格内容 if hasattr(self, 'table_frame'): self.table_frame.destroy() self.table_frame = tk.Frame(self.result_text) self.table_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) table_scroll_y = ttk.Scrollbar(self.table_frame, orient=tk.VERTICAL) table_scroll_y.pack(side=tk.RIGHT, fill=tk.Y) table_scroll_x = ttk.Scrollbar(self.table_frame, orient=tk.HORIZONTAL) table_scroll_x.pack(side=tk.BOTTOM, fill=tk.X) # 显示第一个表格 header = next(self.record_sheet.iter_rows(min_row=1, max_row=1, values_only=True)) # 创建表格 table = ttk.Treeview(self.table_frame, columns=header, show='headings',
height=10, yscrollcommand=table_scroll_y.set, xscrollcommand=table_scroll_x.set)
# 设置表格样式
table.column("#0", width=0, stretch=tk.NO)
for i, col in enumerate(header):
table.column(col, width=100, stretch=tk.NO)
table.heading(col, text=col)
# 填充表格数据
for row in self.record_sheet.iter_rows(min_row=2, values_only=True):
table.insert("", tk.END, values=row)
# 显示第二个表格
header2 = next(self.record_sheet2.iter_rows(min_row=1, max_row=1, values_only=True)) # 创建表格
table2 = ttk.Treeview(self.table_frame2, columns=header2, show='headings', height=10, yscrollcommand=table_scroll_y2.set, xscrollcommand=table_scroll_x2.set)
# 设置表格样式
table2.column("#0", width=0, stretch=tk.NO)
for i, col in enumerate(header2):
table2.column(col, width=100, stretch=tk.NO)
table2.heading(col, text=col)
# 填充表格数据
for row in self.record_sheet2.iter_rows(min_row=2, values_only=True):
table2.insert("", tk.END, values=row)
# 显示表格
table.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
table_scroll_y.config(command=table.yview)
table_scroll_x.config(command=table.xview)
table2.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
table_scroll_y2.config(command=table2.yview)
table_scroll_x2.config(command=table2.xview)
self.result_text.config(state=tk.NORMAL)
self.result_text.insert(tk.END, "Excel表格读取完成!\n")
self.result_text.config(state=tk.DISABLED)
这段代码是用来读取 Excel 表格并在界面上显示的。其中,通过 Treeview 控件实现了表格的显示,使用 Scrollbar 实现了滚动条。同时,还支持同时显示两个表格。