生产实训日报(6)

姓名:曹佳鑫   日期:6 月 24 号

今日学习任务:单片机的学习。

今日任务完成情况:1 LED灯的点亮 2 蜂鸣器 3 独立按键 4 矩阵按键 5 数码管(digital)

今日开发中遇到的问题汇总:不清楚各个功能怎么用,以及接口的对应关系。

今日未解决的问题:无

今日开发收获:知道了:矩阵按键的使用,数码管以及锁存器的功能,学会看懂原理图以及端口与芯片的连接关系。

自我评价:优秀。

上课知识点:

芯片:


1 LED


#include <reg51.h> //点亮LED灯有两种方法。1给P1赋值如:P1=0x00;8个灯全部点亮
//#define LED P1 
sbit LED1 = P1^0;//位寻址,你要哪一位就让哪一位点亮
sbit LED2 = P1^1;
void delay()
{
int x = 200 ,y;
while(x--)
{
for(y = 0;y <2000; y++)
}
}
void main()
{
//LED = 0x00;// 
LED1 = 0;//
LED2 = 0;

while(1);
/*{
LED = 0xfe;
delay();
LED = 0xfd;
delay();
for(i = 0; i < 8; i++)
{
LED = ~(1 << i);
delay();
}

} */

}   


2蜂鸣器


#include <reg51.h>
sbit beep = P2^3;
void delay()
{
int x = 10, y;
while(x--)
{
for(y = 0; y < 2; y++);
}
}
void main()
{
while(1)
{
beep = ~beep;
delay();
}
}

3 用独立按键点亮LED灯

#include <reg51.h>
#define LED P1
sbit button2 = P3^4;
sbit button3 = P3^5;
sbit button4 = P3^6;
sbit button5 = P3^7;
sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
void main()
{
while(1)
 {
LED = 0xff;//首先让LED灯全部熄灭,不亮,LED是低电平点亮。
if(button2 == 0)
{
led1 = 0;
}

if(button3 == 0)
{
led2 = 0;
}

if(button4 == 0)
{
led3 = 0;
}

if(button5 == 0)
{
led4 = 0;
}
 }

}

4矩阵按键来控制LED的点亮 

知识点:先列后行,顺序:RD-》P3.0,比如要第一列亮,也就是LCDEN=0;(低电平有效),P3=11101111




#include <reg51.h>
#define LED P1
sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
void main()
{ int key ;
while (1)
{
 key = 0;
LED = 0xff;//先全部置一,没有任何一个键按下
P3 = 0xf0;//11110000 ,每一列都没有按下(0表示按下,低电平有效)左边第一个1表示的是RD=1,没有按下。
if (P3 != 0xf0)//因为按下了,所以P3不再是0xff.
{
switch(P3)
{
case 0xe0://11100000
key += 0;
break;
case 0xd0://11010000
key += 1;
break;
case 0xb0:   //10110000
 key += 2;
break;
case 0x70:
 key += 3;
break;
}
}

P3 = 0x0f;//00001111现在判断到底是哪一行

                                        //(列RD WR RS LCDEN 都为0,表示按下了,行都为1,没有一个按下)

switch(P3)//分析行的情况
{
case 0x0e://00001110
key += 1;
break;
case 0x0d://00001101
key += 5;
break;
case 0x0b://00001011
key += 9;
break;
case 0x07://00000111
key += 13;
break;
}
}
switch(key)
{
case 1:
led1 = 0;
break;
case 2:
led2 = 0;
break;
case 3:
led3 = 0;
break;
case 4:
led4 = 0;
break;
}

}


5.数码管  重要的知识点:由于段选和位选都由P0一个端口控制,所以用锁存器来存储,目的是:数据不被覆盖掉,当位选开启时 也就是:DULA=1,P1执行位选功能,然后位选关闭,也就是:DULA=0;再段选开启,也就是:WELA=1,确认数字,然后再关闭。交替进行。

LA

#include <reg51.h>
sbit duan =P2^6;
sbit wei = P2^7; 
unsigned char code table_wei[] = {0xfe, 0xfd, 0xfb};//位从左到右
unsigned char code table_duan[] = {0x3f, 0x06,0x5b};//数字由(a b c d e f g)构成
void delay()
{
int x = 50, y;
while(x--)
{
for (y = 0; y < 30; y++);
}
}

void main()
{
/*wei = 1;//
P0 = 0x00;
wei = 0;

duan = 1;
P0 = 0x3f;
duan = 0;

while(1);*/

int i = 0;
while(1)
{
for(i = 0; i < 3; i++)
{
wei = 1;//位使能端开启
P0 = table_wei[i];//
wei = 0;//位 关闭
duan = 1;//段开启
P0 = table_duan[i];
duan = 0;//段关闭
delay();
}
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值