求大神一个关于89c52单片机用S0键来启动和停止流水灯的程序,在这里先感谢各位大佬帮帮忙。

求大神一个关于89c52单片机用S0键来启动和停止流水灯的程序,在这里先感谢各位大佬帮帮忙。,第1张

//键控流水

#include "REG52.H"

#define DataGPIOP1//显示端口

#define FLOWTIME100//修改此值,改变流水速度

sbit KEY = P2^0//按键

bit Start_flag =0//流水灯控制

bit Flow_flag =0//流水

unsigned char Cnt =0//流水灯计数器

unsigned char KEY_Cnt=0//按键识别计数器

void Init_Timer0()//定时器0初始化

{

TMOD |= 0x01//16位计数器

TH0 = 0xEC

TL0 = 0x77//12M,12T,5000us=5ms

TCON |= 0x10//定时器0启动

TCON |= 0x01//定时器0中断允许

IE |= 0x80//总中断开

}

void Flow_Cont()//流水计数

{

if(++Cnt>FLOWTIME)//500ms

{

Cnt=0

Flow_flag =1//流水控制位

}

}

void KEY_Scan()//键扫描

{

if(!KEY)//键被按下

{

if(KEY_Cnt!=0)//键计数器不为0,已经消抖

{

KEY_Cnt = 0//清计数器

Start_flag =~Start_flag//流水显示控制

}

else //键计数器为0,没有消抖

{

KEY_Cnt++//键计数器+1,再扫描一次。

}

}

}

//

void Timer0_ISR() interrupt 1 //定时器0中断响应

{

TCON &= ~0x20//定时器0清溢出

TH0 = 0x3C

TL0 = 0xAF//12M,12T,50000us=50ms

Flow_Cont()//流水计数

KEY_Scan()//键扫描

}

void DispFlashLED()//流水灯

{

if(Flow_flag)

{

Flow_flag =0//

switch(DispBit)

{

case 0 DataGPIO = 0xfebreak

case 0 DataGPIO = 0xfdbreak

case 0 DataGPIO = 0xfbbreak

case 0 DataGPIO = 0xf7break

case 0 DataGPIO = 0xefbreak

case 0 DataGPIO = 0xdfbreak

case 0 DataGPIO = 0xbfbreak

case 0 DataGPIO = 0x7fbreak

}

DispBit++

}

}

int main()

{

Init_Timer0()//定时器0初始化

while(1)

{

if(Start_flag)//如果启动流水灯

{

DispFlashLED()//流水灯

}

else

{

DataGPIO = 0xff//不显示

}

}

}

简易蜂鸣器程序:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit P36=P3^6//我的系统板蜂鸣器口定义

sbit k1=P1^4//按钮1

sbit k2=P1^5//按钮2

void Delay(uint num)//延时函数

{uchar i,j

for(i=0i<255i--)

{for(j=0j>0j++)}

}

main()

{

while(1)

{

if(k1==0)

{P36=0//蜂鸣器响

Delay()

P36=1//蜂鸣器停

Dalay()

key_time()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11061606.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存