AVR单片机期末自选2 4x4薄膜开关控制led灯
AVR单片机期末自选2 4x4薄膜开关控制led灯
具体内容
:AVR单片机 ATmega16
PD接跑马灯 PB接软膜
功能
按1第一个亮 再按就灭
按2第二个亮 再按就灭
……
按8第八个亮 再按就灭
1-8就是对应8个灯 一按亮一按灭
按A全亮 按B全灭 按c奇数亮 按d偶数亮
按9跑马灯依次闪烁
工具/准备工作
所用软件ICCAvr,Proteus8,progisp1.72,win10系统电脑
元器件
YL-34系统板,ATmega16,8路跑马灯LED,杜邦线,4x4矩阵键盘,avr编程器,usbisp烧录器。
设计方法与原理
- 电路说明
具体内容。电路板采用YL-34
.2. 工作原理
初始化设置按键定义,通过8MHz晶振下,通过软件仿真反复实验得到的延时数值。得到1141ms,5/4us。通过这两个值设定延时部分,下一步完成按键扫描函数,低四位输出,连接行线;高四位输入,连接列线。行线输出低电平,列线为带上拉的输入。第一次读B口,进行列扫描。按键消抖后高四位输出,连接列线;低四位输入,连接行线。列线输出低电平,行线为带上拉的输入。第二次读B口,进行行扫描。两次扫描结果组成键盘扫描编码,查表得键盘值。最后led灯部分,首先定义led全部不亮,然后通过case分支使得每个按键对应led灯完成效果
.3. 设计步骤
1. 先设计流水灯与薄膜开关的接法,我将流水灯接到pb,薄膜开关接到pd,设计程序将两者结合在一起变换特效确定设计主题与思路,准备相关器件,查阅资料。
2. 组装器件,编写程序。
3. 将程序烧写至单片机,并多次调试,修改。
4. 进一步完善优化程序。最终完成设计。
- 程序设计
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
//按键=======================
#define Key_DDR DDRB
#define Key_PORT PORTB
#define Key_PIN PINB
uchar key, x;
uchar const key_code[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77,};//键盘编码数组
uchar S0=0,S1=0,S2=0, S4=0,S5=0,S6=0, S8=0,S9=0;
//=延时部分=================
void _delay_us(unsigned int us)
{
unsigned int i;
us=us*5/4; //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
for( i=0;i<us;i++);
}
void _delay_ms(unsigned int ms)
{
unsigned int i,j;
for( i=0;i<ms;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}
//键盘扫描函数*//
uchar keyscan(void)
{
uchar scan1,scan2,keycode,j;
Key_DDR=0X0F; //低四位输出,连接行线;高四位输入,连接列线。
Key_PORT=0XF0; //行线输出低电平,列线为带上拉的输入。
_delay_us(2);
scan1=Key_PIN; //第一次读B口,进行列扫描。
if(scan1!=0xf0) { _delay_ms(10); scan1=Key_PIN; //按键消抖if(scan1!=0xf0){Key_DDR=0XF0; //高四位输出,连接列线;低四位输入,连接行线。Key_PORT=0X0F; //列线输出低电平,行线为带上拉的输入。_delay_us(2);scan2=Key_PIN; //第二次读B口,进行行扫描。keycode=scan1 | scan2; //两次扫描结果组成键盘扫描编码。for(j=0;j<16;j++){if(keycode== key_code[j]) //查表得键盘值{key=j; return(key);} }}}else Key_PORT=0xff;return(key=16); //返回无效值
}
//以上按键部分==============================
//LED灯部分
#define LED_DDR DDRD
#define LED_PORT PORTD
void Led_Init(void)
{
LED_DDR=0xFF;//定义LED全部不亮
LED_PORT=0xFF;
}
//LED灯部分
void main(void)
{
Led_Init();
while(1)
{
keyscan();//扫描按键返回KEY
switch(key)
{
case 15://第1个灯
if(S00)
{
LED_PORT&=~BIT(0);//亮灯
_delay_ms(20);
S0=1;
}
else if(S01)
{
LED_PORT|=BIT(0);//灭灯
_delay_ms(20);
S0=0;
}
break;
case 11://2
if(S10)
{
LED_PORT&=~BIT(1);//亮灯
_delay_ms(20);
S1=1;
}
else if(S11)
{
LED_PORT|=BIT(1);//灭灯
_delay_ms(20);
S1=0;
}
break;
case 7://3
if(S20)
{
LED_PORT&=~BIT(2);//亮灯
_delay_ms(20);
S2=1;
}
else if(S21)
{
LED_PORT|=BIT(2);//灭灯
_delay_ms(20);
S2=0;
}
break;
case 14://4
if(S40)
{
LED_PORT&=~BIT(3);//亮灯
_delay_ms(20);
S4=1;
}
else if(S41)
{
LED_PORT|=BIT(3);//灭灯
_delay_ms(20);
S4=0;
}
break;
case 10://5
if(S50)
{
LED_PORT&=~BIT(4);//亮灯
_delay_ms(20);
S5=1;
}
else if(S51)
{
LED_PORT|=BIT(4);//灭灯
_delay_ms(20);
S5=0;
}
break;
case 6://6
if(S60)
{
LED_PORT&=~BIT(5);//亮灯
_delay_ms(20);
S6=1;
}
else if(S61)
{
LED_PORT|=BIT(5);//灭灯
_delay_ms(20);
S6=0;
}
break;
case 13://第7个灯
if(S80)
{
LED_PORT&=~BIT(6);//亮灯
_delay_ms(20);
S8=1;
}
else if(S81)
{
LED_PORT|=BIT(6);//灭灯
_delay_ms(20);
S8=0;
}
break;
case 9://第8个灯
if(S90)
{
LED_PORT&=~BIT(7);//亮灯
_delay_ms(20);
S9=1;
}
else if(S91)
{
LED_PORT|=BIT(7);//灭灯
_delay_ms(20);
S9=0;
}
break;
case 3://A键全亮
LED_PORT=0x00;//亮灯
_delay_ms(20);
break;
case 2://B键全灭
LED_PORT=0xFF;//灭灯
_delay_ms(20);
break;
case 5://9跑马灯
for( x=0;x<8;x++)
{
LED_PORT=~BIT(x);
_delay_ms(100);
}
break;
case 8://0
LED_PORT=0x00;
break;
default: break;
}
}
AVR单片机期末自选2 4x4薄膜开关控制led灯相关推荐
- 单片机音频节奏灯_如何用单片机做出用音乐节奏来控制LED灯?
我新安装了系统.驱动怎么办 如果你安装了操作系统,需要安装随机带的主板驱动,如果没有请安装下面的驱动.如果需要安装驱动,建议安装驱动精灵2008 ,安装之后,使用其自动更新驱动功能,它会自动下载并安装 ...
- 用51单片机中断控制LED灯亮灭
用51单片机中断控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k3=P3^2;//位定义按键 void dela ...
- Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】
目录 一.前言 二.效果展示 1.APP界面展示 2.C51硬件展示 三.Android Studio APP源代码 1.AndroidManifest.xml 1.请求联网: 2.开放明文传输: 2 ...
- stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭
stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭 接触stm32已经有一年半的时间了,从最开始的stm32F103ZET ...
- 【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务
学习目标: 学习普中51单片机的按键控制led灯. 电路图: 学习内容: LED灯的十六进制怎么算??? 在这给大家算一下:首 ...
- c语言程序小灯从右向左闪烁,单片机控制LED灯点亮(C语言).PPT
<单片机控制LED灯点亮(C语言).PPT>由会员分享,可在线阅读,更多相关<单片机控制LED灯点亮(C语言).PPT(45页珍藏版)>请在人人文库网上搜索. 1.1,单片机控 ...
- 用51单片机实现按键控制LED灯亮灭
用51单片机实现按键控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k1=P3^1;//位定义按键 void de ...
- 用c语言完成流水灯控制的程序设计,单片机C语言程序设计之TIMER0控制流水灯
描述 基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的.通常在所需按键数量不多时,系统常采用独立式按键.这种按键的电路配置灵活,软件结构简单 ...
- 51单片机控制LED灯
个人网站:Geek交流圈 控制单个LED灯 基础知识 C-51的数据类型扩充定义sfr:特殊功能寄存器声明sbit:特殊功能位声明bit:位变量声明 例:sfr SCON = 0X98;sbit OV ...
最新文章
- linux系统编程_Linux系统编程:进程间通信
- 数据拟合matlab算法
- python官网怎么改中文-pycharm如何设置成中文
- VTK修炼之道73:交互部件_Widget应用综述
- 获取/设置IFRAME内对象元素的几种JS方法
- 龙芯3A4000 VNC配置
- 手机网页设计注意事项和解决方法
- 太难了!用Python数据造假后,我被公司升职加薪了~
- mysql的安装与卸载
- python支持中文注释
- python调用java接口或者类_python如何调用java类
- 2020美赛F奖论文(一):摘要、绪论和模型准备
- 【脑电信号】基于matlab SVM分期睡眠监测【含Matlab源码 611期】
- eNSP华为模拟器使用——(11)eNSP模拟无线AC和AP
- 【信道编码/Channel Coding】纠错编码与差错控制
- 什么是HTTP代理?
- mysql emoy表情_emo表情包 - emo微信表情包 - emoQQ表情包 - 发表情 fabiaoqing.com
- 微信小程序开发学习4(视图与逻辑)
- jvm.option是什么,它是如何加载的
- c++ bitset类用法