第九集 数码管
老师说的AS和BS的概念可能不对
应该是共阴和共阳的区别,AS代表共阴极,而BS代表共阳极。
本集内容中我与老师不同的显示时间代码:
- u8 SEG_NUM[] = {
- 0x3F, /*'0', 0*/
- 0x06, /*'1', 1*/
- 0x5B, /*'2', 2*/
- 0x4F, /*'3', 3*/
- 0x66, /*'4', 4*/
- 0x6D, /*'5', 5*/
- 0x7D, /*'6', 6*/
- 0x07, /*'7', 7*/
- 0x7F, /*'8', 8*/
- 0x6F, /*'9', 9*/
- 0x77, /*'A', 10*/
- 0x7C, /*'B', 11*/
- 0x39, /*'C', 12*/
- 0x5E, /*'D', 13*/
- 0x79, /*'E', 14*/
- 0x71, /*'F', 15*/
- 0x40, /*'-', 16*/
- 0x00, /*' ', 17*/
- 0x80, /*'.', 18*/
- };
-
- u8 T_NUM[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
-
- u32 seconds = 0;
- void add_seconds(void) {
- seconds++;
- if (seconds == 86400) // 到了24:00:00了,重新计时
- {
- seconds = 0;
- }
- }
-
- u8 seg_no = 0;
- void seg_task(void) {
- u8 showHour, showMinute, showSec;
- // 得小时 通过整除3600得到小时
- showHour = seconds / 3600;;
- // 得分钟 通过取余3600,再整除60
- showMinute = (seconds % 3600) / 60;
- // 得秒 通过取余60
- showSec = seconds % 60;
-
- if (seg_no == 0) {
- // 小时十位
- Display(SEG_NUM[showHour / 10], ~T_NUM[0]);
- } else if (seg_no == 1) {
- // 小时个位
- Display(SEG_NUM[showHour % 10], ~T_NUM[1]);
- } else if (seg_no == 2) {
- // 分割符
- Display(SEG_NUM[16], ~T_NUM[2]);
- } else if (seg_no == 3) {
- // 分钟十位
- Display(SEG_NUM[showMinute / 10], ~T_NUM[3]);
- } else if (seg_no == 4) {
- // 分钟个位
- Display(SEG_NUM[showMinute % 10], ~T_NUM[4]);
- } else if (seg_no == 5) {
- // 分割符
- Display(SEG_NUM[16], ~T_NUM[5]);
- } else if (seg_no == 6) {
- // 秒十位
- Display(SEG_NUM[showSec / 10], ~T_NUM[6]);
- } else if (seg_no == 7) {
- // 秒个位
- Display(SEG_NUM[showSec % 10], ~T_NUM[7]);
- }
-
- seg_no++;
- if (seg_no == 8) seg_no = 0;
- }
复制代码
课后小练
实验箱演示:
代码文件:
course_09.zip
(160.21 KB, 下载次数: 0)
|