手动可调变速的流水灯程序
$ 程序作用:手动可调变速的流水灯的效果
$ 程序作者: JQ(QQ:489555226 Email:489555226@qq.com)
$ 程序版本: JQ--V0.1
$ 编制日期: 2011-07-01
$ 编译器:Keil C uVision2
$ 所用芯片:STC89C52,11.0592M晶振
$ 程序开发板:JQ--V0.1版本
$ 程序通俗易懂 注释详细 结构化模块是51单片机初学爱好者的理想选择
******************** JQ--V0.1 宏晶公司STC单片机开发板 **********************/
#include
#define uchar unsigned char //数据类型uchar的宏定义
#define uint unsigned int //数据类型uint的宏定义
#define led P0 //P0口宏定义
void init();
uchar count,speed,num; //全局变量定义
sbit key =P3^2;
void delay(uint k);
uchar code huayang[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x55,0x55,0x00}; //花样跑马灯数组定义 随便改变数组里面的值就可以改变花样(该数组有27个数值)
void main(void) //主函数
{
uchar i;
init();
while(1) //while死循环
{
for(i=0;i<8;i++) //0-26共27次循环依次取出数组中的数(i小于多少由数组中的数决定)
{
led=huayang[i]; //把取出的数以总线的方式赋给led即P0口
}
}
}
void init() //初始化
{
speed=0;
TMOD=0x01; //定时器T0的应用 后面会详细讲
TH0=(65536-speed)/256;
TL0=(65536-speed)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //定时器T0中断 后面会详细讲
{
TH0=(65536-speed)/256;
TL0=(65536-speed)%256;
count++;
if(count==5000)
{
count=0;
if(key==0) //按键消抖
{ delay(5);
if(key==0)
num++;
while(!key); //松手检测 只要当key==1时才会退出这个while循环!
if(num==1)
{
speed=50; //速度调节(也就是改变定时器的初值!)
}
if(num==2)
{
speed=100;
}
if(num==3)
{
speed=150;
}
if(num==4)
{
speed=200;
}
}
}
if(num==5) num=0;
}
void delay(uint k) //延时子函数
{
while(--k);
}
//这过程序用到了定时器 后面会跟大家详细讲解的! 谢谢大家!!!
//对于调速函数可以进行修改,使其变得更加的简洁,speed=num*50;if(num==6) num=0;//防止程序出错,所以进行了限制!
手动可调变速流水 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)