📄 text145.c
字号:
/////////////////////////////////////
// Generated Initialization File //
/////////////////////////////////////
#include "reg52.h"
#include"data.h"
//unsigned char N=17; //要显示的汉字的个数
#define N 18
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define MAX_LEN 34//每次接收/发送字符串的长度
bit readFlag = 0;//读标志
uchar readCounts = 0;//已经读取的字符个数,与MAX_LEN比较
uchar idata trdata[MAX_LEN];//要接收/发送的字符串
long int yidong=0;
sbit clk=P1^4;
sbit com=P1^3;
sbit RCLK1=P1^0;
sbit SRCLK =P1^1;
sbit DATA =P1^2;
unsigned char lie=0;
unsigned int sum=0;
unsigned char a;
void UART0_ISR();//串口中断服务程序,接收字符
void Send_Char(uchar ch);//发送单个字符
void Send_Char(unsigned char ch)
{
SBUF = ch;//送入缓冲区
while(TI == 0);//等待发送完毕
TI = 0;//软件清零
}
void delay(unsigned char k)
{
while(k--);
}
//*****************************************************************
//向595发送16位数据
// y 为偏移量
//****************************************************************
void send(unsigned char *D,unsigned char l,unsigned char y)
{
unsigned char m=0,a=y/16,b=y%16,c=0,dat1,dat2,cen[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
if(l<(16-b))c=0;
else
{
c=1;
l=l+b-16;
b=0;
}
dat1=*(D+a*32+l+c*32+b);
dat2=*(D+a*32+l+c*32+b+16);
P3=0xff;
P2=0xfe;
for(m=0;m<8;m++)
{
cen[8+m]=(dat1>>m)&0x01;
}
for(m=0;m<8;m++)
{
cen[m]=(dat2>>m)&0x01;
}
cen[16]=cen[0];
RCLK1=0;
for(m=0;m<16;m++)
{
SRCLK=0;
SRCLK=1;
DATA=cen[m+1];
}
RCLK1=1;
}
//UART0中断服务程序. 接收字符
void UART_ISR(void) interrupt 4 using 1
{
uchar rxch;
if(RI)//中断标志 RI0=1 数据完整接收
{
RI = 0;//软件清零
rxch = SBUF;//读缓冲
//SBUF0=rxch;
if(readCounts>MAX_LEN)
{
readCounts = 0;
readFlag = 1;
}
if(readCounts=MAX_LEN)
{
a=rxch;
}
trdata[readCounts] = rxch;//存入数组,供发送
readCounts++;
//N=1;
}
for(readCounts=1;readCounts<MAX_LEN-1; readCounts++)
{
sum=sum+trdata[readCounts];
}
if(sum!=trdata[MAX_LEN-1])
{
Send_Char(15);
}
}
void main(void)
{
unsigned char m=0;
/*IE = 0x92;
TMOD =0x21;
TCON = 0x10;
// unsigned int i;
SCON=0x50;
PCON=0;
// REN=1;
TH1=0xfd;
TL1=0xfd;
TI=1;
TR1=1;
PS=1;
TL0 = 0x76;
TH0 = 0xd6;*/
IE=0x82;
TCON = 0x10;
TMOD = 0x09;
TL1 = 0x12;
TH1 = 0x00;
while(1)
{
com=1;
for(lie=0;lie<16;lie++)
{
send(DAT,lie,yidong);
clk=0;
clk=1;
com=0;
delay(5);
}
}
}
void aa(void) interrupt 1
{
yidong++;
if(yidong>=16*(N-1)) yidong=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -