求c语言高手帮忙编个单片机的流水灯和lcd显示器同时工作的程序

2025-03-18 20:53:48
推荐回答(4个)
回答1:

流水灯的:
#include
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数

void main(void) //主程序
{
uint i;
uchar temp;
while(1) //循环
{
temp=0x01;
for(i=0;i<8;i++) //8个LED顺向逐个流动
{
P2=~temp; //取反并赋值
delay(60); //调用延时
temp<<=1; //左移一位
}
temp=0x80;
for(i=0;i<8;i++) //8个LED反向逐个流动
{
P2=~temp; //取反并赋值
delay(60); //调用延时
temp>>=1; //右移一位
}
temp=0x01;
for(i=0;i<8;i++) //单个LED顺向作暗涌流动
{
P2=temp;
delay(60); //调用延时
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个LED依次反向全部点亮
{
P2=temp;
delay(60); //调用延时
temp>>=1;
}
}
}

void delay(uint z) //延时函数
{
register uint bt;
for(;z;z--)
for(bt=0;bt<255;bt++);
}
1602LCD的:
#include
#define uint unsigned int
#define uchar unsigned char

uchar code table[]=" Welcome! "; //第一行字符定义/空格可当一个字符(共16)
uchar code table2[]=" www.MCUSY.CN "; //第二行字符定义
uchar num;
sbit lcdRS=P2^5; //读写命令/数据端 0-写命令/1-读写数据
sbit lcdRW=P2^6; //读写控释命令端 1-读/0-写
sbit lcdE=P2^7; //使能端

void delay(uint z) //1MS延时
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}

void write_com(uchar com) //写命令函数
{
lcdRS=0; //写命令
P0=com; //送命令
delay(5);
lcdE=1; //使能
delay(5);
lcdE=0; //关使能

}

void write_data(uchar date) //写数据函数
{
lcdRS=1; //写数据
P0=date; //送数据
delay(5);
lcdE=1; //使能
delay(5);
lcdE=0; //关使能

}

void init()
{ //指令
write_com(0x38); //显示为16*2、5*7
write_com(0x0f); //打开光标
write_com(0x06); //光标闪烁/加一
write_com(0x01); //清屏
write_com(0x80); //数据指针指向第一位
}

void main()
{
lcdRW=0;//只写不读
init();
for(num=0;num<14;num++) //对字符个数的调节
{
write_data(table[num]); //送数显示
delay(200);
}
// write_com(0x01); //加入清屏指令可使写完第一行后清除再写第二行
write_com(0x80+0x40); //0x80-第一行起始地址+0x40-第二行起始地址
for(num=0;num<16;num++)
{
write_data(table2[num]);
delay(200);
}
while(1);
}

回答2:

你得告诉大家是什么样的流水灯,用什么样的lcd?什么型号,有没有原理图?不然该怎么回答,即使回答了,那也是牛头不对马嘴啊!

回答3:

你用定时器来做,定时中断
可以实现你的功能。

回答4:

大大,你那个1602的lcd显示不了怎么复杂的汉字。
以前做过类似的东东
用到了keil 里自带的小实时系统
两任务的同时效果还不错。
留过邮箱,发给你。