学习日志
姓名:唐小玲 日期:2018.7.18
今日学习任务
|
|
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) |
|
今日开发中出现的问题汇总
|
个人单片机这一部分知识点学的不好,掌握程度不够,编写程序的时候有很多问题,需要重新多加练习编写代码。 |
今日未解决问题
|
依旧不会独立编写难度稍高的代码。 |
今日开发收获
|
1.七段数码管 共阳和共阴 2.全部数码管显示 #include<reg51.h>
sbit wei = P2^1; //共阴数码管表 unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; int main() { //wei = 0; P2 = 0x00; P0 = table[0]; while(1); return 0; } 3.两个数码管显示 #include<reg51.h>
sbit wei = P2^1;
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; void delay() { int x = 100, i; while(x--) { for(i = 0; i < 100; i++); } } int main() { while(1) { P2 = 0xfe; //位选,亮第一个 P0 = table[0]; //段选 delay(); P2 = 0xfd; P0 = table[1]; delay(); } return 0; } 4.数码管-锁存器 #include <reg51.h>
sbit duan = P2^6; sbit wei = P2^7;
unsigned char code table[] = {0x3f, 0x06 , 0x5b , 0x4f , 0x66 , 0x6d, 0x7d , 0x07 , 0x7f , 0x6f };
void delay() { int x = 50, i; while (x--) { for (i = 0; i < 10; i++); } }
int main() { // wei = 1; //打开位锁存器 // P0 = 0xfe; // wei = 0; //关闭锁存器,P0值的改变不会影响位选值 // // duan = 1; // P0 = table[8]; // duan = 0;
int i; while (1) { for (i = 0; i < 6; i++) { wei = 1; P0 = ~(1 << i); wei = 0; duan = 1; P0 = table[i]; duan = 0; delay(); } } return 0; } 5.数码段 #include <reg51.h>
sbit wei = P2^1;
int key = 0, num1 = 0, num2 = 0;
unsigned char code table[] = {0x3f, 0x06 , 0x5b , 0x4f , 0x66 , 0x6d, 0x7d , 0x07 , 0x7f , 0x6f };
void delay() { int x = 50, i;
while (x--) { for (i = 0; i < 15; i++); } }
void KeyScan() { P1 = 0xf0; if(P1 != 0xf0) { switch(P1) { case 0xe0: key = 0; break; case 0xd0: key = 1; break; case 0xb0: key = 2; break; case 0x70: key = 3; break; } P1 = 0x0f; switch(P1) { case 0x0e: key += 1; break; case 0x0d: key += 5; break; case 0x0b: key += 9; break; case 0x07: key += 13; break; } while (P1 != 0x0f); } }
void display(int n) { if (n >= 0 && n <= 9) { P2 = 0xfe; P0 = table[n]; } else if (n >= 10 && n <= 99) { P2 = 0xfe; P0 = table[n / 10]; delay(); P2 = ~(1 << 1); P0 = table[n % 10]; delay(); } }
int main() { int i, display_flag = 0; while (1) { key = 0; KeyScan();
switch(key) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: num1 = num1 * 10 + key; break; case 10: num1 = num1 * 10 + 0; break; case 11: //+ display_flag = 1; break; case 12: //- case 13: //* case 14: // / break; } if (1 == display_flag) { display(num1); } } return 0; }
|
自我评价 (是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等) |
一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习! |
作业 |
1.制作简易计算器,利用数码管显示 #include <reg51.h>
sbit wei = P2^1;
int key = 0, num1 = 0, num2 = 0;
unsigned char code table[] = {0x3f, 0x06 , 0x5b , 0x4f , 0x66 , 0x6d, 0x7d , 0x07 , 0x7f , 0x6f };
void delay() { int x = 50, i;
while (x--) { for (i = 0; i < 15; i++); } }
void delay1() { int x = 100,i; while(x--) { for(i = 0;i < 100;i++); } }
void KeyScan() { P1 = 0xf0; //判断哪一列被按下 if(P1 != 0xf0) { switch(P1) { case 0xe0: key = 0; break; case 0xd0: key = 1; break; case 0xb0: key = 2; break; case 0x70: key = 3; break; } P1 = 0x0f;//判断哪一行被按下 switch(P1) { case 0x0e: key += 1; break; case 0x0d: key += 5; break; case 0x0b: key += 9; break; case 0x07: key += 13; break; } while (P1 != 0x0f); } }
void display(int n) { if (n >= 0 && n <= 9) { P2 = 0xfe; P0 = table[n]; } else if (n >= 10 && n <= 99) { P2 = 0xfe; P0 = table[n / 10]; delay(); P2 = ~(1 << 1); P0 = table[n % 10]; delay(); } else if (n >= 100 && n <= 999) { P2 = 0xfe; P0 = table[n / 100]; delay(); P2 = ~(1 << 1); P0 = table[(n % 100) / 10]; delay(); P2 = ~(1 << 2); P0 = table[((n % 100) % 10)]; delay(); }
}
int main() { int i, display_flag = 0,display_flag1 = 0; int display_flag2 = 0,display_flag3 = 0,display_flag4 = 0; int flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0; int j = 10000; while (1) { key = 0; KeyScan(); //检测按键
switch(key) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: num1 = num1 * 10 + key; break; case 10: num1 = num1 * 10 + 0; break; case 11: //+ display_flag1 = 1; flag1 = 1; break; case 12: //- display_flag2 = 1; flag2 = 1; break; case 13: //* display_flag3 = 1; flag3 = 1; break; case 14: /// display_flag4 = 1; flag4 = 1; break; case 15: //= display_flag = 1; break; } if ((display_flag1 == 1)||(display_flag2 == 1)||(display_flag3 == 1)||(display_flag4 == 1)) { display(num1); delay1(); num2 = num1; num1 = 0; display_flag1 = 0; display_flag2 = 0; display_flag3 = 0; display_flag4 = 0; }
if(display_flag == 0) { display(num2); }
//显示加法的结果 if((display_flag == 1)&&(flag1 == 1)) { display(num1+num2); }
//显示减法的结果 if((display_flag == 1)&&(flag2 == 1)) { display(num2-num1); }
//显示乘法的结果 if((display_flag == 1)&&(flag3 == 1)) { display(num1*num2); }
//显示除法的结果 if((display_flag == 1)&&(flag4 == 1)) { display(num2/num1); }
} return 0; } |