
你好,时间的话可以考虑使用时钟芯片DS3231,P1口控制段码的话,可以使用两颗595芯片搞定,P2口也可以使用595搞定,P口就扫描按键输入就行了。秒表的话,使用单片机内部的定时器,可以很精确的计时。。至于倒计时,什么的话,都一个道理使用单片机内部的定时器搞定。如果你还不懂的话,我们可以提供有偿服务。
这个问题可大可小,
用三种红绿蓝可以混合色各种颜色,这个程序是吧,每个颜色分成200级(实际是201级),所以值就是0到200,然后用PWM输出控制各色的亮度,混合出七彩,如R=200、G=200、B=200就是白色,但不是纯正的白。(纯白色时RGB的值是不相等的)
户外的超大LED广告屏就是这样的,每个像素点就是一个全色LED灯。
#include <reg52h>
#define uint unsigned int
#define uchar unsigned char
sbit cs1=P2^0; //段
sbit cs2=P2^1; //位
sbit wr =P2^2; //使能
uchar num =0; //T0计时
uchar mark=0; //显示数码管标志
uchar time[2]; //显示时间暂存
uchar code col_table[]={0xfe,0xfd}; //数码管的第一位和第二位
uchar code table[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
}; //共阳极数码管数字0-9的段码
/-----1ms延时函数-----/
void Delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=115;y>0;y--);
}
/-----主函数-----/
void main()
{
TMOD=0x01; //定时器工作在方式0
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256; //装初值
EA =1; //开总中断
ET0=1; //允许T0中断
TR0=1; //开T0
while(1) //死循环
{
P0=table[time[mark]]; //显示段数据
cs1=0;
wr =0;
wr =1;
cs1=1;
P0=col_table[mark]; //显示位数据
cs2=0;
wr =0;
wr =1;
cs2=1;
Delay(1); //延时1ms
mark++; //第一位和第二位间切换达到动态扫描显示
if(mark==2) mark=0;
}
}
/-----T0-----/
void Timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==2)
{
num=0;
time[0]++;
if(time[0]==10)
{
time[0]=0;
time[1]++;
if(time[1]==6) time[1]=0;
}
}
}
刚给你写的,你自己看看吧,希望对你有帮助~~~
#include<reg52h>
sbit led = P1^0;
void mian()
{
led = 0;//如果是LED阳极接在单片机上,则是--> led = 1;
while(1);
}
以上就是关于51单片机程序设计,在6位LED数码管上显示时间,P1口控制显示器段码,P2口控制显示器位码全部的内容,包括:51单片机程序设计,在6位LED数码管上显示时间,P1口控制显示器段码,P2口控制显示器位码、单片机驱动LED七彩灯程序、实现1~59秒的动态LED 循环显示 单片机89c51的程序 急急急!!!!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)