
#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()
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)