求大佬能把两个程序整合成一个,十分感谢!!!!!!
LED程序如下:
#include <reg51.h>
#include<intrins.h>
/* 数据端接口定义 */
sbit LSH = P1^0; //列数时钟
sbit LDS = P1^1; //输入
sbit LST = P1^2; //列寄存器
sbit HSH = P1^3; //行数时钟
sbit HDS = P1^4; //输入
sbit HST = P1^5; //行寄存器时钟
unsigned int sel[17]={0x7fff,0xbfff,0xdfff,0xefff,0xf7ff,0xfbff,0xfdff,0xfeff,
0xff7f,0xffbf,0xffdf,0xffef,0xfff7,0xfffb,0xfffd,0xfffe,
0xffff,
};
char code hanzi[170] =
{
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,//
0x00,0x00,
0x10,0x00,0x10,0x00,0x3F,0xFC,0x20,0x00,0x4F,0xF0,0x80,0x00,0x3F,0xF0,0x00,0x10,
0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x0A,0x00,0x0A,0x00,0x06,0x00,0x02,//
0x00,0x00,
0x01,0x08,0x42,0x08,0x27,0x88,0x24,0x88,0x07,0xBE,0x04,0x88,0xE7,0x88,0x24,0xC8,
0x24,0xA8,0x2F,0xA8,0x21,0x88,0x2A,0x88,0x34,0x88,0x28,0x88,0x02,0xA8,0x01,0x10,//
0x00,0x00,
0x08,0x80,0x08,0x80,0x08,0x80,0x10,0x80,0x17,0xFE,0x30,0x80,0x31,0x00,0x51,0x00,
0x91,0xFC,0x12,0x20,0x12,0x20,0x14,0x20,0x14,0x20,0x18,0x20,0x13,0xFE,0x10,0x00,//
0x00,0x00,
0x01,0x00,0x00,0x80,0x3F,0xFE,0x20,0x80,0x2F,0xF8,0x20,0x88,0x3F,0xFE,0x20,0x88,
0x2F,0xF8,0x28,0x80,0x24,0xC4,0x22,0xA8,0x44,0x90,0x48,0x88,0x92,0x86,0x01,0x00,//
0x00,0x00,
};
void send_data_H(unsigned int dat); /* 发送行数据端数据函数 */
void send_data_L(unsigned int dat); /* 发送列选通端数据函数 */
void display(int a); //每一次显示什么东西
void delay(unsigned int m);
void main()
{
unsigned int j=0,num;
while(1)
{
num=6;
while(num--)
{
display(j);
delay(10);
}
j=j+2;
//if(j>150)
//j=0;
}
}
//unsigned int a,b;
//a=sel[i]%256;//后八位
//b=sel[i]/256;//前八位
//send_data_H(b);
void send_data_L(unsigned int dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
LSH = 0;
LDS = dat&0x80; //temp<<=1;
dat = dat<<1; //ds = CY;
LSH = 1;
}
LST = 0;
_nop_();
_nop_();
LST = 1;
}
void send_data_H(unsigned int dat)
{
int i;
for(i=0;i<16;i++)
{
HSH = 0;
HDS = dat&0x8000;
dat =dat<<1;
HSH = 1;
}
HST = 0;
_nop_();
HST = 1;
}
void delay(unsigned int m)
{
unsigned char i;
for(;m>0;m--)
{
for(i=0;i<124;i++)
{}
}
}
void display( int a)
{
unsigned char i;
unsigned int x;
for(i=0;i<16;i++)
{
send_data_H(sel[i]);
x=a+2*i;//展示第几个字符
if(a+2*i>168)
x=(a+2*i)%170;
send_data_L(hanzi[x]);
send_data_L(hanzi[x+1]);
delay(1);
}
}
LCD程序如下:
#include <reg51.h>
#include <intrins.h> //包含_nop_( )空函数指令的头文件
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^0; //位变量开发板6 平时0
sbit RW=P2^1; //位变量开发板5 平时1
sbit E=P2^2; //位变量开发板7 平时2
void lcd_initial(void); //LCD初始化函数
void check_busy(void); //检查忙标志函数
void write_command(uchar com); //写命令函数
void write_data(uchar dat); //写数据函数
void string(uchar ad ,uchar *s);
void lcd_test(void);
void delay(uint);
void main(void) //主函数
{
lcd_initial( ); //调用对LCD初始化函数
while(1)
{
string(0x80,"2021 04 12"); //显示的第1行字符串,从左边第5个字符开始显示
string(0xC2," 14:00 "); //显示的第2行字符串,,从左边第2个字符开始显示
delay(300); //延时
write_command(0x01); //写入清屏命令
delay(300); //延时
}
}
void delay(uint j) //1ms延时子程序
{
uchar i=250;
for(;j>0;j--)
{
while(--i);
i=249;
while(--i);
i=250;
}
}
void check_busy(void) //检查忙标志函数
{
uchar dt;
do
{
dt=0xff;
E=0;
RS=0;
RW=1;
E=1;
dt=out;
}while(dt&0x80);
E=0;
}
void write_command(uchar com) //写命令函数
{
check_busy();
E=0;
RS=0;
RW=0;
out=com;
E=1;
_nop_( );
E=0;
delay(1);
}
void write_data(uchar dat) //写数据函数
{ check_busy();
E=0;
RS=1;
RW=0;
out=dat;
E=1;
_nop_();
E=0;
delay(1);
}
void lcd_initial(void) //液晶显示器初始化函数
{
write_command(0x38); //写入命令0x38:8位两行显示,5×7点阵字符
write_command(0x0C); //写入命令0x0C:开整体显示,光标关,无黑块
write_command(0x06); //写入命令0x06:光标右移
write_command(0x01); //写入命令0x01:清屏
delay(1);
}
void string(uchar ad,uchar *s) //输出显示字符串的函数
{
write_command(ad);
while(*s>0)
{
write_data(*s++); //输出字符串,且指针增1
delay(100);
}
}
建议先把2个程序的功能逻辑及流程搞清楚,再根据新需求分析进行加工整合。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632