单片机C语言红绿灯程序,要求:数码管显示时间倒计时、16*16LED点阵显示模块显示红绿黄灯、

void Affirm()
{ int i=0; display(0,1);
}
int j=0;
void Ext1_Int() interrupt 2
if(Key0_times==1)
{
second0_static=second0_static-1;
j=second0_static/10;
display(j,second0_static-10*j);
}
else if(Key0_times==2)
{
second1_static=second1_static-1;
j=second1_static/10;
display(j,second1_static-10*j);
}
else if(Key0_times==3)
{
second2_static=second2_static-1;
j=second2_static/10;
display(j,second2_static-10*j);
}
else if(Key0_times==4)
{
second0_static=30;second1_static=30;second2_static=30;
Key0_times=0;
display(3,0);
}
}
void DisSetTime(int time)
{
display(3,0);
if(time==0)
{
display(3,0);
}
else if(time==1)
{
display(3,0); else if(time==2)
{
display(3,0); //显示 Turn Time:
}
}
idata int direction=0;

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define BLKN 2 //列锁存器数
sbit G = P1^7; //P1.7为显示允许控制信号端口
sbit RCLK = P2^0; //P2.0为输出锁存器时钟信号端
sbit SCLR = P2^1; //P2.1为移位寄存器清○端
void delay(uint); //延时函数
uchar data display[32]; //显示缓存
uchar code BMP[][32]={{16,0,16,0,37,248,36,64,120,64,8,64,16,64,32,64,124,64,0,64,0,64,12,64,112,64,3,252,0,0,0,0},
{16,0,19,240,32,16,41,240,120,16,19,252,32,64,122,72,1,80,0,224,25,80,102,76,0,64,1,192,0,0,0,0},
{4,64,4,64,63,248,4,64,127,252,1,0,31,240,17,16,31,240,17,16,31,240,8,32,16,16,32,8,0,0,0,0}}; //字模表'红‘’绿‘‘黄’
void main()
{
register uchar i,j;
SCON=0x00; //串口工作模式0:移位寄存器方式
TMOD=0x01; //定时器T0工作方式1:16位方式
P1=0x3f; //P1端口初值:允许接收、锁存、显示
TR0=1; //启动定时器T0
ET0=1; //允许定时器T0中断
EA=1; //开启总中断;
while(1)
{
delay(2000);
for(j=0;j<3;j++)
{
for(i=0;i<32;i++)
{
display[i]=~BMP[j][i];
if (i%2) delay(100);
}
delay(10000);
}
}
}
void delay(uint x)
{
register uchar i,j;
for (i=x;i>0;i--)
for (j=120;j>0;j--);
}
void leddisplay(void) interrupt 1 using 1
{
register uchar i, j=BLKN;
TH0 =(65536-100)/256; //设定显示屏刷新率每秒60帧
TL0 =(65536-100)%256;
i = P1; //读取当前显示的行号
i = ++i & 0x0f; //行号加1,屏蔽高4位
while(j)
{
j--;
SBUF = display[i*BLKN + j]; //送显示数据
while (!TI);
TI = 0;
} //完成一行数据的发送
G = 1; //消隐(关闭显示)
P1 &= 0xf0; //行号端口清○
RCLK = 1; //显示数据打入输出锁存器
P1 |= i; //写入行号
RCLK = 0; //锁存显示数据
G = 0; //打开显示
}追问

还缺个数码管动态或静态显示 求硬件原理图和流程图,有的话再追加50

追答

有原理图和仿真电路图,没有画流程图

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-25
分别用红绿黄3个字代表红绿黄3灯亮
----
你先得有能够显示汉字的电路,再编写出来显示汉字的程序。
然后再讨论这个问题:单片机C语言红绿灯程序。追问

可以不用汉字啊,用3种不同的符号代替也行啊,16*16LED点阵显示模块表示啊,RCLK CLK DLN A B C D 分别什么功能啊

本回答被网友采纳
第2个回答  2012-09-25
16*16显示红绿黄灯?追问

分别用红绿黄3个字代表红绿黄3灯亮

单片机C语言红绿灯程序,要求:数码管显示时间倒计时、16*16LED点阵显示...
sbit G = P1^7; \/\/P1.7为显示允许控制信号端口 sbit RCLK = P2^0; \/\/P2.0为输出锁存器时钟信号端 sbit SCLR = P2^1; \/\/P2.1为移位寄存器清○端 void delay(uint); \/\/延时函数 uchar data display[32]; \/\/显示缓存 uchar code BMP[][32]={{16,0,16,0,37,248,...

51单片机c语言控制16*16LED行共阳点阵显示“朱”字,用proteus模拟无法显...
www.dzkfw.com.cn\/myxin\/51c_language.chm 单片机c语言

...*32点阵怎么左移,下面这个程序只能实现两个16*16输出相同的内容,怎 ...
回答:把你的数组内容扩大一倍,会像你说的那样。 我在用Arduinor控制595的LED数码管条级联时,就是这样子的,数组长度等于一条LED时,两条级联显示一样,等于两条LED就依次显示不同了。

...*32点阵怎么左移,下面这个程序只能实现两个16*16输出相同的内容,怎 ...
其实点阵显示就是:(针对16*16点阵显示一个汉字)静止的显示就是扫第一行时送汉字的第一行,扫第二行时送汉字的第二行...扫第16行时送汉字的第16行,这叫第一帧扫完。如果想让字动那么扫第二帧时,行扫描第一行时,送汉字的第二行数据,行扫描第二行时,送汉字的第三行数据...就这样错开...

如何让单片机按下键时数码管显示的值和点阵屏显示一致的数字_百度知 ...
1、定义数码管和点阵屏的接口。2、定义按键和数码管、点阵屏驱动的接口。3、编写按键按下的处理函数。4、编写数码管和点阵屏驱动的函数。5、在主程序中调用按键按下的处理函数和数码管、点阵屏驱动的函数。

数码管显示和led点阵显示区别
显示方式不同、显示效果不同。1、显示方式:数码管通常是由多个LED灯组成的,分为共阴极和共阳极两种类型,LED点阵显示则是由几万到几十万个半导体发光二极管像素点均匀排列组成的显示器。2、显示效果:数码管只能显示数字和一些简单的字符,显示效果相对单一,而LED点阵显示可以显示各种文字、图像和动画,...

怎么用Keil软件编写16X16点阵,要求三个字,实现滚动显示,例如大中小
和多数码管显示字是一样的啊,都是你要先对大中小字体编好编码,然后动态显示,至于滚动,你将要显示的字逐渐的显示出来就好了啊

单片机控制的16*16点阵显示汉字,不知道为什么会出现字体镜像
方法1、反向取数据,第一列是screen[s][31-2*r],第二列是screen[s][30-2*r],然后, if ((data1&0x80)==0x80)改成if (data1&0x01),data1<<=1改成data1>>=1;方法2、将字模数据反向,包括数组内顺序与字节内顺序

3位16*16点阵LED显示屏是怎么显示的
扫描方式..原理和数码管显示差不多...我这一般用单片机,加行列驱动74hc154,和74hc595..

如何解决LED数码管点阵显示器乱码问题?
首先不知道你的程序要求是什么,也就是在没有要求记数之前是什么动作应该显示什么,当然楼上说的也有道理,你可以在要求显示前把显示始终值0让他显示数字“0”然后在根据记数要求来累加。。。

相似回答