今日学习任务:
今天主要学习了单片机的基本构造,因为有了51单片机的基础所以理解起来容易了一些。
首先是完成了LED灯的点亮,并且实现了流水灯的效果。之后是蜂鸣器和行列式键盘,实现了用键盘控制LED和蜂鸣器。
今日任务完成情况:
流水灯的实现:
#include<reg51.h>
#define LED P1
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
void delay(int ms)
{
int i;
while(ms--)
for(i=0;i<100;i++);
}
void main()
{
int i;
while(1)
{
for(i = 0;i < 9;i++)
{
P1 = (0xff << i);
delay(500);
if(P1 == 0x00)
{
P1 = 0xff;
}
}
}
}
蜂鸣器可实现占空比:
void delay(int ms)
{
int i;
while(ms--)
for(i=0;i<100;i++);
}
sbit Beep = P2^3;
void main()
{
while(1)
{
Beep = 0;
delay(10);
Beep = 1;
delay(1);
}
}
今日开发中出现的问题汇总:
行列式键盘的键值获取,行列的扫描。
蜂鸣器占空比的改变。
今日未解决的问题:
行列式键盘键值获取。
今日开发收获:
今天复习了单片机,熟悉了很多的操作,每一个接口的功能,怎么样去点亮LED灯,控制蜂鸣器和行列式键盘。
自我评价:
学习比较认真,作业独立完成。
其他:
无
作业题:
#include<reg51.h>
sbit Beep = P2^3;
void delay(int ms)
{
int i;
while(ms--)
for(i=0;i<100;i++);
}
int key;
int main()
{
while (1)
{
key = 0;
Beep = 1;
P3 = 0xf0;//判断哪一列被按下
if(P3 != 0xf0)
{
switch(P3)
{
case 0xe0: key = 0; break;
case 0xd0: key = 1; break;
case 0xb0: key = 2; break;
case 0x70: key = 3; break;
}
P3 = 0x0f;//判断哪一行被按下
switch(P3)
{
case 0x0e: key += 1; break;
case 0x0d: key += 5; break;
case 0x0b: key += 9; break;
case 0x07: key += 13; break;
}
}
switch (key)
{
case 1:
Beep = 0;
delay(10);
break;
case 2:
Beep = 0;
delay(15);
break;
case 3:
Beep = 0;
delay(20);
break;
case 4:
Beep = 0;
delay(25);
break;
case 5:
Beep = 0;
delay(30);
break;
case 6:
Beep = 0;
delay(35);
break;
case 7:
Beep = 0;
delay(40);
break;
case 8:
Beep = 0;
delay(45);
break;
case 9:
Beep = 0;
delay(50);
break;
case 10:
Beep = 0;
delay(55);
break;
case 11:
Beep = 0;
delay(60);
break;
case 12:
Beep = 0;
delay(65);
break;
case 13:
Beep = 0;
delay(70);
break;
case 14:
Beep = 0;
delay(75);
break;
case 15:
Beep = 0;
delay(80);
break;
case 16:
Beep = 0;
delay(85);
break;
}
}
return 0;
}