基于单片机的心型LED灯的设计与实现
2024-09-05 03:59:00
#include<reg51.h>
#include<intrins.h>
#define char unsigned char
#define unit unsigned int
sbit k1=P3^;//定义开始键
sbit k2=P3^;//定义暂停键
sbit k3=P3^;//定义模式切换
sbit k4=P3^; //定义速度切换
void disp1();
void disp2();
void disp3();
void typeqiehuan();
void speedqiehuan();
unit speed=;unit type=;unit time=;unit count=;
int flag1=;
void delay(unit s)
{
unit x,y;
for(x=s;x>;x--)
for(y=;y>;y--);
while(flag1==); //毫秒级
}
void disp1()
{
unit i;
P1=P0=0x00;
delay();
/*P1=P0=0x00;
delay(1000);
P1=P0=0x00;
delay(1000);
P1=P0=0x00;
delay(1000);
P1=P0=0x00;
delay(1000);
P1=P0=0x00;
delay(1000);*/
P1=P0=0xff;
for(i=;i<;i++)
{
P1=P0=0x00;
delay();
P1=P0=0xff;
delay();
}
} void disp2()
{
P1=0xff;
P0=0x00;
delay(speed);
/*if(k2==0)
while(1)//如果检测K2按下,死循环
;
else */if(k2==)
goto l;
l:P1=0x00;
P0=0xff;
delay(speed);
} void disp3()
{
P1=0x33;
P0=0xCC;
delay(speed);
/* if(k2==0)
while(1)
;
else */if(k2==)
goto m;
m:P1=0xCC;
P0=0x33;
delay(speed);
} void typeqiehuan()
{
while()
{
while(k2==);
if(type%==)
disp2();
if(type%==)
disp3();
}
}
void speedqiehuan()
{
//while(1)
//{
//while(k4==0)
if(time%==)
speed=;
else if(time%==)
speed=;
else if(time%==)
speed=;
else if(time%==)
speed=;
//}
} void T0_INT() interrupt
{
typeqiehuan();
}
void T1_INT() interrupt
{
count++;
if(count%==)
flag1=;
else
flag1=;
}
void T0_TIME() interrupt
{
TH0=(-)/;//取高八位,算初值
TL0=(-)%;//取低八位,算初值
if(k3==)
{
delay(); //防抖
if(k3==)
type++;
}
if(k4==)
{
delay();
if(k4==)
time++;
}
speedqiehuan();
}
void main()
{
disp1();
//P0=0xff;
//P1=0xff;
//delay(5000);
TMOD=0x01;//T0为工作方式一
IT0 = ;//TCON中控制INT0触发方式位,INT0下降沿触发中断
IT1 = ;
EA = ; //总中断允许控制位
EX0 = ; //允许外部中断INT0
EX1 = ; //允许外部中断INT1
ET0=;//允许计数器T0溢出中断
TH0=(-)/;
TL0=(-)%;
TR0=;//立即开始计数
IP=0x06;//设置优先级
while() //等待人来操作,防止程序过快跑完
{
P1=P0=0x00;
}
}
仿真原理图如下:
最新文章
- Maven详解
- visual studio for mac的安装初体验
- 转: BAT等研发团队的技术博客
- 学习SQLite之路(一)
- Mac OS Storm+Kafka+Zookeeper配置
- 在mysql数据库原有字段后增加新内容
- Apache Shiro系列教程之二:十分钟上手Shiro
- webservice和restful的区别
- java并发编程-线程池的使用
- Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-3 显示一个动态的熊猫
- 机器学习(一):梯度下降、神经网络、BP神经网络
- DNS预获取(dns-prefetch)
- 部分PC端安卓管理器使用强行断开重连的方法来连接手机,容易丢书数据,损坏数据
- iOS面试必看经典试题分析
- sql server 2008 18456错误
- 获取所有栈的信息,只有最上面的和最下面的,但是不能获取栈中间的activity信息
- keepalive配置支持ipv6、ipv4双棧支持
- SDK目录结构
- Asp.Net.Identity认证不依赖Entity Framework实现方式
- 15-Flink实战项目之实时热销排行
热门文章
- JDBC访问数据库的具体步骤(MySql + Oracle + SQLServer)
- Speech Super Resolution Generative Adversarial Network
- java代码之美(16) ---Java8 Optional
- python 分析慢查询日志生成报告
- Tomcat 修改日志输出配置 定期删除日志
- SSM/SSH框架的MySQL 读写分离实现的一种简单方法
- [转]adbkey与adbkey.pub
- php 的file 缓存
- Idea操作ElasticSearch
- c语言标准I/O