⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text145.c

📁 在C8051F040上成功一直了UCOS操作系统
💻 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 + -