//-----------------------------------------------------------------
//名称:定时器控制4只LED滚动闪烁
//网站:www.taobai.cc
//说明:4只LED在定时器中断例程下控制不断滚动闪烁
//-----------------------------------------------------------------
//=================================================================
//声明
//=================================================================
//“头文件”或称为包含文件(.h),这是一种预先定义好的基本数据。
#include //定义8051寄存器的头文件
//宏定义
#defineucharunsignedchar//定义无符号字符型(0——255)
#define uintunsigned int//定义无符号整型(0——65535)
//字符与整型分为有符号(signed)与无符号(unsigned)两类
//通常sbit数据类型是用于存取内部可位寻址的数据存储器
sbitB1=P2^0; //声明B1为P1.0端口
sbitG1=P2^1;
sbitR1=P2^2;
sbitY1=P2^3;
//若要使用权sbit数据类型,则其声明方式有下列几种:
//1.先声明一个bdata存储器形式的变量,再声明属于该变量的sbit变量,例如:
// charbdatascan; 声明scan为bdata存储器类型的字符
// sbitinput_0=scan^0; 声明input_0为scan变量的bit0
//2.先声明一个sfr变量,再声明属于该变量的sbit变量,例如:
// sfrP0=0x80; 声明P0为0X80存储器位置,即P0
// sbitP0_0=P0^0; 声明P0_0为P0变量的bit0
//3.直接指定存储器位置,例如要声明P0的bit0,则
// sbitP0_0=0X80^0;声明P0_0为0x80地址的bit0
uinti,j,k;
//-------------------------------------------------------------------
//主程序
//-------------------------------------------------------------------
voidmain() //主程序开始
{
i=j=k=0;
P2=0xff;//开始时全部关闭
TMOD=0X02; //定时/计数器工作方式寄存器 低4位
//T0定时器0工作于模式2位数:8位计数范围:0-255具有自动加载功能
TH0=256-200; //200us定时
TL0=256-200;
IE=0X82; //中断使能寄存器IE,相当于EA=1;ET0=1;
TR0=1; //定时器/计数器控制寄存器TCODTimer0的启动开关
while(1); //无穷循环
}
//-------------------------------------------------------------
//T0中断函数
//--------------------------------------------------------------
voidLED_Flash_and_Scroll()interrupt1
{ //每累计若干次定时器中断才执行一次闪烁
if(++k<35)return;//if条件语句
k=0;
switch(i) //多分支选择语句,switch语句开始
{
case0:B1=!B1; //蓝灯闪烁
break; //终止执行switch或循环语句
case1:G1=!G1; //绿灯闪烁
break;
case2:R1=!R1; //红灯闪烁
break;
case3:Y1=!Y1; //黄灯闪烁
break; //退出switch语句
default:i=0;
}
if(++j<150) //每次LED持续闪烁一段时间
return; //从函数返回语句
j=0;
P2=0xff; //关闭显示
i++; //切换到下一LED
//符号:++,功能:加1,范例:i++,说明:执行运算后再将X变量的值加1
//符号:--,功能:减1,范例:i--,说明:执行运算后再将X变量的值减1
}
//在选择C51中循环语句中,要注意以下几个问题;
//1.定义C51循环变量时,尽量采用无符号字符型变量
//2.在for循环语句中,尽量采用变量减减来做循环
//3.在do...while、while语句中,循环内变量也采用减减方法
|
|