• 大小: 18KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: C/C++
  • 标签: 51单片机  

资源简介

51单片机液晶屏交通灯,c语言,模拟交通灯功能。

资源截图

代码片段和文件信息

/*******************************************************************
     交通灯篇
功能简介:模拟交通灯,用液晶屏显示出红灯绿灯黄灯三种情形,当黄灯剩下
三秒时,让数字闪烁并显示出时间剩余情况。

实施步骤:步骤1:完成LCD的显示功能,开启定时器0,完成红灯功能;步骤2:
完成绿灯功能;步骤3:完成黄灯功能,开始让黄灯闪烁。


********************************************************************

********************************************************************/

#include 
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^3; //lcd液晶显示屏读使能端,蜂鸣器,数码管段选位选的重定义
sbit wela=P2^7;
sbit dula=P2^6;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uchar table[]=“The light is red“; //lcd上交通灯信息提示语
uchar table1[]=“Please stop: “;
uchar table2[]=“It‘s your time !“;
uchar table3[]=“Be careful : “;
uchar table4[]=“Time is limited!“;
uchar iflag; //i用来完成提示语的显示,flag用来切换信息显示
uchar num; //num用来计数
int red=59green=59yellow=4;
void delay(uint z)
{
uint ij;
for(i=0;i for(j=0;j<110;j++);
}
void writecom(uchar com) //lcd写命令函数
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void writedate(uchar date) //lcd写数据函数
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcdinit() //lcd初始化函数
{
lcden=0;
wela=0;
dula=0;
writecom(0x38);
writecom(0x0c);
writecom(0x06);
writecom(0x01);
writecom(0x80);
for(i=0;i<16;i++)
{
writedate(table[i]);
delay(5);
}
writecom(0xc0);
for(i=0;i<13;i++)
{
writedate(table1[i]);
delay(5);
}
}
void lcddisplay(uchar adduchar date) //lcd显示倒计时函数
{
uchar shige;
shi=date/10;
ge=date%10;
writecom(0xc0+add);
writedate(0x30+shi);
delay(5);
writedate(0x30+ge);
delay(5);
}
void timeinit() //定时器0初始化函数表
{
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
EA=1;
ET0=1;
TR0=1;
}
void timedelay() interrupt 1 //定时器中断函数
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
num++;
if(num==20)
{
num=0;
if(flag==0) //红灯倒计时
{
red--;
if(red==-1)
{
flag=1;
red=59;
}
}

if(flag==1) //绿灯倒计时
{
green--;
if(green==-1)
{
flag=2;
green=60;
}
}

if(flag==2) //黄灯倒计时
{
yellow--;
if(yellow==-1)
{
flag=0;
yellow=4;
}
}
}

}

int main()
{
timeinit();
lcdinit();
beep=1;
while(1)
{
if(flag==2)
{
writecom(0x80);
for(i=0;i<16;i++)
{
writedate(table4[i]);
delay(5);
}
writecom(0xc0); //黄灯状态下的黄灯的倒计时将会以闪烁形式完成,同时蜂鸣器,led的状态形式与数码管交通灯的状态相同
for(i=0;i<13;i++)
{
writedate(table3[i]);
delay(5);
}
lcddisplay(13yellow);
beep=0;
P1=0xaa;
delay(500);
writecom(0xc0+13);
writedate(0xa0);
writecom(0xc0+14);
writedate(0xa0);
beep=1;
P1=0;
}

if(flag==1)
{
P1=0xaa;
writecom(0x80);
for(i=0;i<16;i++)
{
writedate(table2[i]);
delay(5);
}
writecom(0xc0);
for(i=0;i<13;i++)
{
writedate(table3[i]); //lcd显示绿灯倒计

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3631  2012-08-30 18:31  综合应用6-液晶屏交通灯\trafficlight.c

     文件       7026  2012-08-30 10:46  综合应用6-液晶屏交通灯\trafficlight.LST

     文件      11622  2012-08-30 10:46  综合应用6-液晶屏交通灯\trafficlight.OBJ

     文件       9886  2012-08-30 10:46  综合应用6-液晶屏交通灯\交通灯

     文件       2315  2012-08-30 10:46  综合应用6-液晶屏交通灯\交通灯.hex

     文件         50  2012-08-30 10:46  综合应用6-液晶屏交通灯\交通灯.lnp

     文件      15070  2012-08-30 10:46  综合应用6-液晶屏交通灯\交通灯.M51

     文件       1009  2012-08-30 12:48  综合应用6-液晶屏交通灯\交通灯.Opt

     文件        385  2012-08-30 12:48  综合应用6-液晶屏交通灯\交通灯.plg

     文件       1665  2012-08-30 12:48  综合应用6-液晶屏交通灯\交通灯.Uv2

    .......      1011  2012-08-30 10:46  综合应用6-液晶屏交通灯\交通灯_Opt.Bak

    .......      1665  2012-08-30 10:46  综合应用6-液晶屏交通灯\交通灯_Uv2.Bak

     目录          0  2012-08-30 18:31  综合应用6-液晶屏交通灯

----------- ---------  ---------- -----  ----

                55335                    13


评论

共有 条评论