lcdbf是液晶屏的忙状态标志位,是用来检测忙状态的,不能写0 的。
先别管LED灯,先让液晶屏显示出字符来再说,这个程序有RW引脚了。
把画圈那行删掉,这程序还是没检测忙状态,但可以增加延时,这次再试一下吧。
你好,时间的话可以考虑使用时钟芯片DS3231,P1口控制段码的话,可以使用两颗595芯片搞定,P2口也可以使用595搞定,P口就扫描按键输入就行了。秒表的话,使用单片机内部的定时器,可以很精确的计时。。至于倒计时,什么的话,都一个道理使用单片机内部的定时器搞定。如果你还不懂的话,我们可以提供有偿服务。
#include <reg51h>
#define uint unsigned int
#define uchar unsigned char
#define BLKN 2 //列锁存器数
sbit G = P1^7; //P17为显示允许控制信号端口
sbit RCLK = P2^0; //P20为输出锁存器时钟信号端
sbit SCLR = P2^1; //P21为移位寄存器清○端
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[iBLKN + j]; //送显示数据
while (!TI);
TI = 0;
} //完成一行数据的发送
G = 1; //消隐(关闭显示)
P1 &= 0xf0; //行号端口清○
RCLK = 1; //显示数据打入输出锁存器
P1 |= i; //写入行号
RCLK = 0; //锁存显示数据
G = 0; //打开显示
}
以上就是关于单片机液晶显示RW和RS引脚与LED灯的P1^0和P1^1重合,应该怎么写程序才能让显示屏工作而LED灯不工作呢全部的内容,包括:单片机液晶显示RW和RS引脚与LED灯的P1^0和P1^1重合,应该怎么写程序才能让显示屏工作而LED灯不工作呢、51单片机程序设计,在6位LED数码管上显示时间,P1口控制显示器段码,P2口控制显示器位码、单片机C语言红绿灯程序,要求:数码管显示时间倒计时、16*16LED点阵显示模块显示红绿黄灯、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)