/*
程序效果:有三个按键,按下其中任意一个流水灯的速度改变
*/
#include //52系列单片机的头文件
#define uchar unsigned char//宏定义
#define uint unsigned int
uchar count=40,flag=0; //定义刚开始的流水灯的速度,后一个为标志变量
void main()
{
uchar i=0;//定义局部变量
EA=1; //打开总中断
ET0=1; //打开定时器
TR0=1; //启动定时器
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
P2=0xfe; //点亮第一个数码管,为下次循环做准备
while(1)
{
if(flag) //flag被置位
{
flag=0;//清零,为下次做准备
P2=~P2; //取反
P2<<=1; //左移一位
P2=~P2; //取反
i++;
if(i==8) //移到第八个数码管,则从新装初值
{
i=0;
P2=0xfe;
}
}
P0=0xf0; //赋初值
if((P0&0xf0)!=0xf0) //判断是否有按键按下
{
if(P0==0x70) //按下第一个按键
count=60; //给count从新赋值
if(P0==0xb0)
count=20;
if(P0==0xd0)
count=10;
}
}
}
void time0() interrupt 1 //定时器0
{
static uchar cnt; //定义静态变量
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++; //计数
if(cnt==count)
{
cnt=0; //清零
flag=1; //置标志位
}
}
关键字:按键控制 单片机 流水灯速度
引用地址:
按键控制单片机改变流水灯速度
推荐阅读最新更新时间:2024-03-16 13:12
分析解决“STM8L101单片机IO口模拟串口通讯发生的奇怪现象”
日因工作关系,需要用STM8L101F3P6这款单片机用IO口模拟串行通讯,波特率2400bps,前辈同事已经写完了程序,我需要拿来研究一下该款MCU的低功耗的情况,而在调试的过程中,发现1个奇怪的问题,描述如下: 在while(1){}的循环中,无论是接收还是发送。第一次循环的收发数据都是错的,此后的循环均正确。比如:PC一个字符一个字符的发送0x01,0x02,0x03,接收到3个字符MCU就发回来,但第1次循环接收到是错误数据0x40,0xA0,0xE0,此后再循环收发均正确。。。百思不得其解,在while(1)循环内还会出这种问题? 代码如下: /**********************************
[单片机]
基于单片机MSP430F147的自动寻边器下位机设计
摘要:为了适应环境的变化,运用单片机MSP430F147设计一个自动寻边器,给出了寻边器的下位机电路设计方案,经过多次训练后得出交界区的最优参考电压,与寻边器采集的电压信号相比较,判断得出是否已经到达交界处,此寻边器在机电行业不同环境下可完成现场工件检测。 寻边器是机电行业现场检测工件常用的光学计量仪器。长期以来,为保证光学投影仪或工业数控机床检测中的成像质量、测量准确度等技术指标,国内外传统自动寻边器生产厂家推出的投影仪其成像都是反像。为迎合部分顾客的特殊需求,各厂家相继推出其成像为正像的投影仪。该技术常利用寻边器装在主轴上,对孔壁、矩形工件外形进行寻点坐标后,将其坐标值记录下来,经手工计算,再输入到零点偏置。 在实际加
[单片机]
单片机c语言教程:C51开关分支语句
学习了条件语句,用多个条件语句能实现多方向条件分支,但是能发现使用过多的 条件语句实现多方向分支会使条件语句嵌套过多,程序冗长,这样读起来也很不好读。这个时候 使用开关语句同样能达到处理多分支选择的目的,又能使程序结构清晰。它的语法为下: switch (表达式) { case 常量表达式 1: 语句 1; break; case 常量表达式 2: 语句 2; break; case 常量表达式 3: 语句 3; break; case 常量表达式 n: 语句 n; break; default: 语句 } 运行中 switch 后面的表达式的值将会做为条件,与 case 后面的各个常量表达式的值相 对比,如果相等时则
[单片机]
avr单片机IIc总线编程
#define IIC_Start() TWCR =(1 TWINT)|(1 TWSTA)|(1 TWEN) #define IIC_Stop() TWCR =(1 TWINT)|(1 TWSTO)|(1 TWEN) #define IIC_Wait() while(!(TWCR&(1 TWINT))) #define IIC_NoneAck() TWCR =(1 TWINT)|(1 TWEN) #define IIC_Ack() TWCR =(1 TWINT)|(1 TWEN)|(1 TWEA) /*=========================================
[单片机]
AT89S52单片机对洗衣机控制电路的设计
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在洗衣机得到广泛应用。参考电路如下图所示:
[单片机]
AT89C52单片机的性能原理及应用解析
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。 它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51
[单片机]
基于AT90S8515单片机的瞬变信号捕获与存储器
当代科学研究的许多领域中,常会遇到如何捕捉单次瞬变信号的问题。对于单脉冲信号捕获、周期信号频谱分析等高速数据采集系统,通常都采用DMA技术实现。不论是由PC机内的DMA控制器芯片实现,还是由单片机结合DMA技术实现,其系统结构都比较复杂;若采用通用DSP芯片开发该类仪器仪表,造价过高。故此,研制电路简单、实用廉价的高速数据采集系统是很必要的。本瞬变信号捕获与存储器正是基于以上因素而设计的,它是由AT90S8515单片机直接控制TLC5510高速A/D实现高速数据采集,采样速率高达8MHz,具有如下功能: ·可捕获各种单次脉冲,最小脉宽可达1微秒。 ·可将捕获信号通过X轴、Y轴输出,在CRT上显示出来。 ·能实
[单片机]
Digi-Key库存全套Luminary Micro Stellaris微控制器
日前,Digi-Key Corporation宣布目前已库存基于Cortex-M3的全套Luminary Micro Stellaris系列微控制器产品(MCU)。这些产品的提供与双方6月份全球经销协议的签订保持一致。位于德克萨斯、Austin的Luminary Micro, Inc.设计、营销及销售基于ARM Cortex-M3的微控制器。 目前通过Digi-Key可获得Luminary Micro的整个产品系列,其中包括51款Stellaris微控制器,以及易于使用的小型通用Stellaris评估及开发套件,这些套件提供了嵌入式开发员在10分钟或更短时间内启动并运行所需的所有方面。 Stellaris系列主要面向需要大量控
[焦点新闻]