IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【无标题】 -> 正文阅读

[嵌入式]【无标题】

51单片机实验笔记(AT89C51)

一.时钟电路与复位电路

时钟电路:cap(电容)(在时钟电路里一般设置为22pf)和cry(水晶体)(一般设置为12M

image-20211114170020020

上电复位(电阻res)

image-20211114170715596

按键复位及上电复位:

image-20211116172045248

二.流水灯的实现

共阳极、共阴极(共阴极接反了)

image-20211116172353832

#include<reg51.h>
unsigned char leddat[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//00000001 00000010 00000100 00001000
void delay(unsigned int n)
{
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
void led()
{
	int i=0;
	for(i=0;i<8;i++)
	{
		P2=~leddat[i];//取反,是因为低电平有效,此处为共阳极流水灯
		delay(100);
	}
}

void main()
{
	while(1)
	{
		led();
	}
}

三.数码管的使用(7seg)

数码管的结构和原理(共阴极和共阳极)

image-20211116173118838

image-20211116173230862

image-20211116173246595

静态显示与动态显示

image-20211116173553928

image-20211116173607980

实验演示电路

静态:

image-20211116175919502

#include<reg51.h>
unsigned char leddat[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴0-9
void delay(unsigned int n)
{
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
void seg()
{
	int i=0;
	for(i=0;i<10;i++)
	{
		P2=leddat[i];
		delay(1000);
	}
}

void main()
{
	while(1)
	{
		seg();
	}
}

动态:显示hellocathode(阴极)

image-20211116182333291

#include<reg51.h>
unsigned char str[]={0x76,0x79,0x38,0x38,0x3F};//hello
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位
void delay(unsigned int n)
{
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
void seg()
{
	int i=0;
	for(i=0;i<5;i++)
	{
		P3=~wei[i];//取反,是因为低电平有效
		P2=str[i];
		delay(5);//视差
	}
}

void main()
{
	while(1)
	{
		seg();
	}
}

添加74ls138译码器:将8位口减少为三位

image-20211116183526047

#include<reg51.h>
unsigned char str[]={0x76,0x79,0x38,0x38,0x3F};
unsigned char wei[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};//译码器
void delay(unsigned int n)
{
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
void seg()
{
	int i=0;
	for(i=0;i<5;i++)
	{
		P3=wei[i];//译码器已经取反,此处不需取反
		P2=str[i];
		delay(5);
	}
}

void main()
{
	while(1)
	{
		seg();
	}
}

四.键盘原理及按键的实现(button)

image-20211116183754678

image-20211116183841001

image-20211116183848520

image-20211116183855283

image-20211116195518088

#include<reg51.h>
sbit key0=P1^0;
unsigned char leddat[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴0-9
int num=0;
int flag=0;
void delay(unsigned int n)
{
	unsigned int i=0,j=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<120;j++);
	}
}
void key()
{
	//if(key0==0)
	//{
	//delay(200);
	//if(key0==0)
	//{
	//	num++;
	//}
	//}
	if(key0==0&&flag==0)
	{
		flag=1;
	}
	if(flag==1&&key0==1)
	{
		num++;
		flag=0;
	}
	
}
void seg()
{
	P2=leddat[num];
	if(num==10)
		num=0;
}

void main()
{
	while(1)
	{
		key();
		seg();
	}
}

image-20211116203701539

#include"reg51.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6f};
unsigned char num=0;

void delay(unsigned int n)
{ 
  unsigned char i=0,j=0;
  for (i=0;i<n;i++)
  {
   for (j=0;j<120;j++);
  }
}

void key_scan()
{ 
 unsigned char temp0=0,temp1=0,temp;
  P1=0xf0;
  if(P1!=0xf0)
  {
   delay(20);
   temp0=P1;
   P1=0x0f;
   if(P1!=0x0f)
   {
	 delay(20);
     temp1=P1;
   }
  }
   temp=temp0+temp1;
   if(temp==0xee)
   {
    num=0;
   }
   if(temp==0xed)
   {
    num=1;
   }
}

void display()
{
 P2=s[num] ;
}
void main()
{
	while(1)
	{
	  key_scan();
	  display();
	}
} 

五.定时器/计数器

image-20211117220158163

image-20211117220218306

image-20211117220232243

image-20211117220241948

image-20211117220251966

image-20211117220352691

image-20211117220416042

工作方式1,16位定时器,定时50ms,每隔50ms进入一次中断,在中断中应该重置初值

#include"reg51.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴0-9
unsigned int count=0;
void inittimer()
{
	TMOD=0x01;//0000 0001
	TH0=(65536-50000)/256;//50ms=50000us   256=2^8 初值>>8 高八位右移,用于存储高八位
	TL0=(65536-50000)%256;//存入低八位
	ET0=1;//开启定时器0中断
	EA=1;//开启总中断
	TR0=1;//启动定时器0
}
void display()
{
	P2=s[count];
	if(count==10)
	{
		count=0;
	}
}

void main()
{
	inittimer();
	while(1)
	{
		display();
	}
}

void timer_isr() interrupt 1 //0表示外部中断,1表示定时器中断0,2表示外部中断1,3表示定时器中断1,4表示串口中断
{
	TH0=(65536-50000)/256;//
	TL0=(65536-50000)%256;//应该重新置入初值
	count++;//对应段码数组
}

image-20211117215412375

定时1s:

#include"reg51.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴0-9
unsigned int count=0,num=0;
void inittimer()
{
	TMOD=0x01;//0000 0001
	TH0=(65536-50000)/256;//50ms=50000us   256=2^8 初值>>8 高八位右移,用于存储高八位
	TL0=(65536-50000)%256;//存入低八位
	ET0=1;//开启定时器0中断
	EA=1;//开启总中断
	TR0=1;//启动定时器0
}
void display()
{
	P2=s[num];
	if(num==10)
	{
		num=0;
	}
}

void main()
{
	inittimer();
	while(1)
	{
		display();
	}
}

void timer_isr() interrupt 1 //0表示外部中断,1表示定时器中断0,2表示外部中断1,3表示定时器中断1,4表示串口中断
{
	TH0=(65536-50000)/256;//
	TL0=(65536-50000)%256;//应该重新置入初值
    count++;
    if(count==20)//定时1s
    {
        num++;//对应段码数组
        count=0;
    }
	
}

计数器(只能连接p3.4和p3.5)

#include"reg51.h"
unsigned char s[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴0-9
unsigned int num=0;
void initcounter()
{
	TMOD=0x06;//0000 0110 工作方式2,计数
	TH0=256-3;//计数3次
	TL0=256-3;
	ET0=1;//开启定时计数器0中断
	EA=1;//开启总中断
	TR0=1;//启动定时计数器0
}
void display()
{
	P2=s[num];
	if(num==10)
	{
		num=0;
	}
}

void main()
{
	initcounter();
	while(1)
	{
		display();
	}
}

void counter_isr() interrupt 1 //0表示外部中断,1表示定时器中断0,2表示外部中断1,3表示定时器中断1,4表示串口中断
{
	num++;
}

image-20211117225135866

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:47:09  更:2021-11-19 17:48:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:49:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码