单片机流水灯c语言实现DOC.docx
- 文档编号:1778377
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:119
- 大小:2.71MB
单片机流水灯c语言实现DOC.docx
《单片机流水灯c语言实现DOC.docx》由会员分享,可在线阅读,更多相关《单片机流水灯c语言实现DOC.docx(119页珍藏版)》请在冰豆网上搜索。
单片机流水灯c语言实现DOC
实验一闪烁的Led
//名称:
闪烁的Led
//说明:
Led按设定的时间间隔闪烁,约亮1秒灭1秒
//-----------------------------------
#include
#defineucharunsignedchar//uchar宏定义
#defineuintunsignedint//uint宏定义
sbitled=P1^0;
//-----------------------------------
//延时子程序
//-----------------------------------
voiddelayMs(uintx)
{
uchari;//uchari取值为0-255
while(x--)
{
for(i=0;i<120;i++);//延时120微妙
}
}
//------------------------------------
//主程序
//-----------------------------------
voidmain()
{
while
(1)
{
led=~led;
delayMs(2050);//约亮1秒灭1秒
}
}
实验二从左到右的流水灯
//名称:
从左到右的流水灯
//说明:
接在P0端口的8只Led从左到右循环依次点亮,产生走马灯效果
//-----------------------------------
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//------------------------------------
//延时函数
voiddelayMs(uintx)
{
uchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
//-------------------------------------
//主程序
voidmain()
{
P0=0xfe;//P0口初始化值1111.1110
while
(1)
{
P0=_crol_(P0,1);//P0口循环左移1位
delayMs(150);//晶振为11.0592时,0.1594885秒移动一次
}
}
实验三左右来回循环的流水灯
//名称:
左右来回循环的流水灯
//说明:
程序利用循环移位函数_crol_和_cror形成来回滚动的效果
//---------------------------------------
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
//---------------------------------------
voiddelayMs(uintx)
{
uchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
//--------------------------------------
voidmain()
{
uchari;
P2=0x01;//P2端口初始化
while
(1)//死循环
{
for(i=0;i<7;i++)//i自加1,当i=7时执行第二个for语句
{
P2=_crol_(P2,1);//P2端口循环左移1位
delayMs(150);
}
for(i=0;i<7;i++)
{
P2=_cror_(P2,1);//P2端口循环右移1位
delayMs(150);
}
}
}
//注释for(i=0;i<7;i++).i初始值为0,
//i++就是i自加1,每加一次执行
//P2=_crol_(P2,1);//P2端口循环左移1位
//delayMs(150);延时
//当i=7时,跳出第一个for语句,
//执行第二个for语句
实验四花样流水灯
//名称:
花样流水灯
//说明:
16只LED分两段组按预设的多种花样变换显示
//-------------------------------------
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodepattern_P0[]={0xfc,0xf7,0x5f};//定义P0显示数组
ucharcodepattern_P2[]={0xff,0x07,0xf5};//定义P2显示数组
//调整数组{}里的内容,可以实现自定义的花样显示
//-------------------------------------
voiddelayMs(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
//-------------------------------------
voidmain()
{
uchari;
while
(1)
{
for(i=0;i<7;i++)
{
P0=pattern_P0[i];//i自加1次,P0数组重新扫描1次
P2=pattern_P2[i];//i自加1次,P2数组重新扫描1次
delayMs(150);
}
}
}
//数组定义格式为
//ucharcodepattern_P0[]={0xfc,0xf7};
//uhar为数组类型,pattern_P0数组名称
//code数组存储类型
//{0xfc,0xf7}为数组显示参数,为0xff为全部关闭
实验五Led模拟交通灯
//Led模拟交通灯
//说明:
东西向绿灯亮若干秒,黄灯闪烁,闪烁5秒后亮红灯,
//红灯亮后,南北向有红灯变为绿灯,若干秒后南北向黄灯闪烁,
//闪烁5次后,亮红灯,东西向绿灯亮,如此重复
//-------------------------------------------------
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitred_a=P0^0;
sbityellow_a=P0^1;
sbitgreen_a=P0^2;
sbitred_b=P0^3;
sbityellow_b=P0^4;
sbitgreen_b=P0^5;//sbit为LED控制位定义
ucharFlash_Count=0,Operation_Type=1;
//Flash_Count闪烁次数和Operation_Type操作类型变量定义
//---------------------------------------------
voiddelayMs(uintx)
{
uchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
//---------------------------------------------
//交通灯切换子程序
voidTraffic_Light()
{
switch(Operation_Type)
{
case1:
//东西向绿灯亮与南北向红灯亮
red_a=1;yellow_a=1;green_a=0;
red_b=0;yellow_b=1;green_b=1;
delayMs(2000);
Operation_Type=2;
break;
case2:
//东西向黄灯开始闪烁,绿灯关闭
delayMs(300);
yellow_a=!
yellow_a;green_a=1;
//黄灯闪烁5次
if(++Flash_Count!
=10)return;
Flash_Count=0;
Operation_Type=3;
break;
case3:
//东西向红灯与南北向绿灯亮
red_a=0;yellow_a=1;green_a=1;
red_b=1;yellow_b=1;green_b=0;
delayMs(2000);
Operation_Type=4;
break;//中断case3执行case4
case4:
//南北向黄灯开始闪烁
delayMs(300);
yellow_b=!
yellow_b;green_b=1;
if(++Flash_Count!
=10)return;
Flash_Count=0;
Operation_Type=1;
}
}
//--------------------------------------------
voidmain()
{
while
(1)Traffic_Light();
}
//switch是多分支选择语句常用格式
//switch(表达式)
//{case常量表达式1;语句1
//case常量表达式2;语句2
//case常量表达式3;语句3
//case常量表达式n;语句n
//default:
语句n+1}
//return是返回值,break的返回是指停止这一次执行,返回开始
实验六单只数码管循环显示0--9
//单只数码管循环显示0--9
//说明:
主程序中的循环语句反复将0--9的段码送至P0端口
//使数字0--9循环显示
//------------------------------------------------
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeDSY_CODE[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0xff};
//{}内为共阳数码管0-9的编码
//---------------------------------------
voidDelayMs(uintx)
{
uchari;
while(x--)for(i=0;i<120;i++);
}
//----------------------------------------
voidmain()
{
uchari=0;
P0=0x00;
while
(1)
{
P0=~DSY_CODE[i];//显示数组取反
i=(i+1)%10;//
DelayMs(180);
}
}
//说明;电路中数码管接法是共阴,段码表是共阳的
//;所以用P0=Y~DS_CODE[i]语句取反显示
实验七8只数码管滚动显示单个不同数字
用三极管驱动显示不正常,最好去掉三级管驱动
//8只数码管滚动显示单个不同数字
//说明:
数码管从左到右依次滚动显示0--9,
//程序通过每次仅循环选通一只数码管
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 流水 语言 实现 DOC