① c语言程序设计实例
这是个宏定义,表示后面那个格式化字符串以FORMAT来代替
② 用C语言编写一个简单程序,有哪些步骤,可以举一个例子详细讲解下吗
#include<stdio>
//这个是头文抄件袭
也是
C语言里面最常用的头文件之一
int
main()//这个是主函数
也就是程序的入口
你写的程序就是从这里开始的
{
//这个
{
}表示里面的范围
是必须的
跟main
主函数是不可分的
int
a=2;
//这里表示有一个
int型的数据a(int型就是整数型)把2
赋值给a,你先理解为a=2
printf(“%d,a”);//printf函数的意思是在界面输入,%d
的意思是
整形数据的输出格式
对应的
是a,而每一段结束后都要用
;
去表示结束
return
0;
//这个表示
返回
0
给主函数
,你理解为结束语句也行。
}
③ 200行以上C语言程序举例
无聊,粘着玩  657行
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdarg.h>
#include <ctype.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <Winsock2.h>
#include <ws2tcpip.h>
#include <io.h>
int raw2iframe(char *rawfile, char *ifile );
int Ts_pes(const char *src, const char *des ,unsigned short pid);
int pes_raw( char *pesfile, char *rawfile );
int es_pes(char *src, char *des);
int pes_ts(char *tsfile, char *pesfile);
static unsigned char m_buf[188 * 1024];
static unsigned char buf[188*1024];
/* 设置Dts时间戳(90khz) */
unsigned int SetDtsTimeStamp( unsigned char *buf, unsigned int time_stemp)
{
 
 buf[0] = ((time_stemp >> 29) | 0x11 ) & 0x1f;
 buf[1] = time_stemp >> 22;
 buf[2] = (time_stemp >> 14) | 0x01;
 buf[3] = time_stemp >> 7;
 buf[4] = (time_stemp << 1) | 0x01;
 return 0;
}
/* 设置Pts时间戳(90khz) */
unsigned int SetPtsTimeStamp( unsigned char *buf, unsigned int time_stemp)
{
 
 buf[0] = ((time_stemp >> 29) | 0x31 ) & 0x3f;
 buf[1] = time_stemp >> 22;
 buf[2] = (time_stemp >> 14) | 0x01;
 buf[3] = time_stemp >> 7;
 buf[4] = (time_stemp << 1) | 0x01;
 return 0;
}
/* 读取时戳(45khz) */
unsigned int GetTimeStamp( unsigned char *buf )
{
 unsigned int ts;
 unsigned char *p = buf;
 
 ts = ((*p>>1) & 0x7) << 30;
 p++;
 ts += (*p) << 22;
 p++;
 ts += ((*p)>>1) << 15;
 p++;
 ts += (*p) << 7;
 p++;
 ts += (*p) >> 1;
 p++;
 
 return ts;
}
/*主函数*/
int main(void)
{
 Ts_pes("shoes.ts", "641.pes", 641);    //提取PES 
 pes_raw("641.pes","641.raw");          //提取ES
 raw2iframe( "641.raw", "641.iframe" ); //提取I帧 
 es_pes("641.iframe", "es.pes");        //打包成PES
 pes_ts("pes.ts","es.pes");             //打包成TS
 return 0;
}
/*从视频中提取PES*/
int Ts_pes(const char *src, const char *des ,unsigned short pid)
{
 unsigned char *p;
 FILE *fpr, *fpw;
 int size;
 int ret;
 unsigned short vpid;
 unsigned char adaptation_field_control;
 unsigned char continuity_counter;
 unsigned char adaptation_field_length;
 unsigned char *payload;
 unsigned char payload_unit_start_indicator;
 unsigned char last_counter = 0xff;
 int start = 0;
 fpr = fopen(src, "rb");  //打开文件
 fpw = fopen(des, "wb");  //写入文件
 if(NULL == fpr || NULL == fpw)
 {
  return -1;
 }
 size = sizeof(m_buf);
 
 while(!feof(fpr))
 {
  ret = fread(m_buf, 1, size, fpr ); //读取文件
  p = m_buf;
  while(p < m_buf + ret)
  {
   vpid = (p[1] & 0x1f) << 8 | p[2];
   if(pid == vpid)
   {
    adaptation_field_control = (p[3]>>4)&0x3; //判断是否有可调整字段
    continuity_counter = p[3] & 0xf;
    payload_unit_start_indicator = (p[1]>>6) & 0x1;
    payload = NULL;
    adaptation_field_length = p[4];
    switch(adaptation_field_control)
    {
    case 0:
    case 2:
     break;    /*0为保留,2为只有调整无负载*/
    case 1:
     payload = p + 4; /*无调整字段*/
     break;
    case 3:
     payload = p + 5 + p[4];/*净荷*/
     break;
    }
    if(1 == payload_unit_start_indicator)
    {
     start = 1;
    }
    if(start && payload)
    {
     fwrite(payload, 1, p + 188 - payload, fpw);  //写入文件
    }
    if( last_counter!= 0xff && ((last_counter +1 )&0xf) != continuity_counter )
    {
     printf( "data lost\n" );
    }
    last_counter = continuity_counter;
   }
   p = p + 188;
  }
 }
 
 printf("ts_pes_END\n");
 
 fclose(fpr);  //关闭
 fclose(fpw);
 return 0;
}
/*从PES中提取ES*/
int pes_raw( char *pesfile, char *rawfile )
{
 FILE *fpd, *fp;
 unsigned char *p, *payload, *tmp;
 int size, num, rdsize;
 unsigned int last = 0;
 __int64 total = 0, wrsize = 0;
 
 fp = fopen( pesfile, "rb" );  
 fpd = fopen( rawfile, "wb" );
 if( fp == NULL || fpd == NULL )
  return -1;
 
 num = 0;
 size = 0;
 p = m_buf;
 
 while( true )
 {
REDO:
 if( m_buf + size <= p )
 {
  p = m_buf;
  size = 0;
 }
 else if( m_buf < p && p < m_buf + size )
 {
  size -= p - m_buf;
  memmove( m_buf, p, size );
  p = m_buf;
 }
 
 if( !feof(fp) && size < sizeof(m_buf) )
 {
  rdsize = fread( m_buf+size, 1, sizeof(m_buf)-size, fp );
  size += rdsize;
  total += rdsize;
 }
 if( size <= 0 )
  break;
 
 tmp = p;
 /* 寻找PES-HEADER: 0X000001E0 */
 while( p[0] != 0 || p[1] != 0 || p[2] != 0x01 ||
  ( ( p[3] & 0xe0 ) != 0xe0 && ( p[3] & 0xe0 ) != 0xc0 ) )
 {
  p++;
  if( m_buf + size <= p )
   goto REDO;
 }
 if( p != tmp )
 {
  printf( "pes skip size=%d\n", p - tmp );
 }
 /* PES_packet_length */
 unsigned short len = (p[4]<<8) | p[5];
 if( len == 0 )
 {
  unsigned char *end = p + 6;
  while( end[0] != 0 || end[1] != 0 || end[2] != 0x01 ||
   ( ( end[3] & 0xe0 ) != 0xe0 && ( end[3] & 0xc0 ) != 0xc0 ) )
  {
   if( m_buf + size <= end )
   {
    if( feof(fp) )
     break;
    goto REDO;
   }
   end++;
  }
  len = end - p - 6;
 }
 if( m_buf + size < p + 6 + len )
 {
  if( feof(fp) )
   break;
  continue;
 }
 p += 6;
 
 {
  unsigned char PES_scrambling_control = (*p>>4)&0x3;
  unsigned char PES_priority = (*p>>3)&0x1;
  unsigned char data_alignment_indicator = (*p>>2)&0x1;
  unsigned char right = (*p>>1)&0x1;
  unsigned char original_or_ = (*p)&0x1;
  p++;
  unsigned char PTS_DTS_flags = (*p>>6)&0x3;
  unsigned char ESCR_flag = (*p>>5)&0x1;
  unsigned char ES_rate_flag = (*p>>4)&0x1;
  unsigned char DSM_trick_mode_flag = (*p>>3)&0x1;
  unsigned char additional__info_flag = (*p>>2)&0x1;
  unsigned char PES_CRC_flag = (*p>>1)&0x1;
  unsigned char PES_extension_flag = (*p)&0x1;
  p++;
  unsigned char PES_header_data_length = *p;
  p++;
  
  payload = p + PES_header_data_length;
  
  if (PTS_DTS_flags == 0x2 )
  {
   unsigned int pts;
   pts = (*p>>1) & 0x7;
   pts = pts << 30;
   p++;
   pts += (*p)<<22;
   p++;
   pts += ((*p)>>1)<<15;
   p++;
   pts += (*p)<<7;
   p++;
   pts += (*p)>>1;
   p++;
   
   p -= 5;
   
   if( pts < last )
   {
    printf( "?\n" );
   }
   last = pts;
  }
  else if( PTS_DTS_flags == 0x3 )
  {
   unsigned int pts, dts;
   
   pts = (*p>>1) & 0x7;
   pts = pts << 30;
   p++;
   pts += (*p)<<22;
   p++;
   pts += ((*p)>>1)<<15;
   p++;
   pts += (*p)<<7;
   p++;
   pts += (*p)>>1;
   p++;
   
   dts = (*p>>1) & 0x7;
   dts = dts << 30;
   p++;
   dts += (*p)<<22;
   p++;
   dts += ((*p)>>1)<<15;
   p++;
   dts += (*p)<<7;
   p++;
   dts += (*p)>>1;
   p++;
   
   p -= 10;
   printf( "num=%d ra=%d size=%d pts-dts=%d\n", num, pts - last, len-3-PES_header_data_length, (int)(pts-dts) );
   if( pts < last )
   {
    printf( "?\n" );
   }
   last = pts;
  }
  else if( PTS_DTS_flags != 0 )
  {
   printf( "error\n" );
  }
  
  if( fpd )
  {
   fwrite( p + PES_header_data_length, 1, len - 3 - PES_header_data_length, fpd );
   wrsize += len - 3 - PES_header_data_length;
  }
  num++;
  p += len - 3;
 }
 
 payload = p;
 size -= p - m_buf;
 memmove( m_buf, p, size );
 p = m_buf;
 }
 
 fclose( fp );
 fclose( fpd );
 
 printf("pes_raw_END\n");
 return 0;
}
/*提取I帧*/
int raw2iframe(char *rawfile, char *ifile )
{
 unsigned char *temp_p;
 unsigned char *p;
 unsigned char picture_coding_type;
 unsigned char buf[188*1024] = {0};
 unsigned char pes_buf[32*1024] = {0};
 unsigned short pid = 641;
 unsigned short t_pid = 0;
 int i = 0;
 int j = 0;
 int size = 0;
 int iLen = 0;
 int wiLen = 0;
 int temp_queue = 0;
 int temp_ifrem = 0;
 
 void *fps = CreateFile(rawfile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);               //打开读文件
 void *fpd = CreateFile(ifile, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0 , NULL);  //打开写文件
 
 temp_p = NULL;
 
 while(1)
 {
  if (0 == ReadFile(fps, buf+size, sizeof(buf)-size, (unsigned long *)&iLen, NULL))                      //读取文件内容
  {
   CloseHandle((HANDLE)fps);
   return -1;
  }
  
  if (0 == iLen)
  {
   break;
  }
  
  p = buf;
  
  while( p + 6 < buf + iLen +size)
  { 
   if (p[0] == 0x0 && p[1] == 0x0 && p[2] == 0x1)    //是头进入
   {
    
    if (p[3] == 0x0 || p[3] == 0xB3 )     
    {
     if ( (NULL != temp_p) && ((1 == temp_queue) || (1 == temp_ifrem)))
     {    
      WriteFile(fpd, temp_p, p-temp_p, (unsigned long *)&wiLen, NULL);  //写文件,先写序列头,再写I帧
      temp_queue = 0;
      temp_ifrem = 0;
      temp_p = NULL;   
     }
    }
    
    if (p[3] == 0xB3)                           //判断是视频序列,则初始化
    {
     temp_queue = 1;
     temp_p = p; 
    }
    
    picture_coding_type = (p[5]>>3) & 0x7;  
    if (p[3] == 0x0 && 1 == picture_coding_type) //判断是I帧,则初始化
    {
     temp_ifrem = 1;
     temp_p = p;
    }
   }
   
   p++; 
  }
  /*把多出来的内容写入下个BUF*/
  if(NULL != temp_p)
  {
   size = buf + iLen + size - temp_p;
   memmove(buf, temp_p, size);  
  }
  else
  {
   size = buf + iLen + size - p;
   memmove(buf, p, size);
  }
  
  temp_p = NULL;
 }
 
 CloseHandle((HANDLE)fps);
 CloseHandle((HANDLE)fpd);
 
 printf("raw_iframe_END\n");
 
 return 0;
}
/*打包成PES*/
int es_pes(char *src, char *des)
{
 FILE *iframe_fp, *pes_fp;
 unsigned char *p;
 unsigned char *temp_p = NULL;
 unsigned char buf[188*1024] = {0};
 unsigned char pes_header[19];
 unsigned short int pes_packet_length = 0;
 unsigned int framecnt = 0;
 unsigned char flag = 0;
 unsigned int Pts = 0;
 unsigned int Dts = 0;
 int i = 0;
 int size = 0;
 int iLen = 0;
 int wiLen = 0;
 int temp_que = 0;
 
 iframe_fp = fopen( src, "rb" );
 pes_fp = fopen( des, "wb" );
 if( iframe_fp == NULL || pes_fp == NULL )
 {
  return -1;
 }
 
 while(!feof(iframe_fp))
 {
  iLen = fread(buf + size, 1, sizeof(buf) - size, iframe_fp);
  p = buf;
  
  while( p + 3 < buf + iLen +size)
  {
   memset(pes_header, 0, sizeof(pes_header));
   if (p[0] == 0x0 && p[1] == 0x0 && p[2] == 0x1 && 0xB3 == p[3])
   {
    if ((NULL != temp_p) && (1 == temp_que))
    {
LAST_I:     
    pes_packet_length = p - temp_p + 13;
    pes_header[4] = (pes_packet_length&0xff00) >> 8; 
    pes_header[5] = pes_packet_length&0x00ff; 
    /*PES包头的相关数据*/
    pes_header[0] = 0;
    pes_header[1] = 0;
    pes_header[2] = 0x01;
    pes_header[3] = 0xE0;
    pes_header[6] = 0x81;
    pes_header[7] = 0xC0; 
    pes_header[8] = 0x0A;
    
    Dts = (framecnt + 1) * 40 * 90;
    Pts = framecnt * 40 * 90;
    SetPtsTimeStamp(&pes_header[9], Pts);  //设置时间戳 PTS
    SetDtsTimeStamp(&pes_header[14], Dts); //设置时间戳 DTS 
    framecnt++;
    if (0 == flag)
    {
     fwrite(pes_header, 1, sizeof(pes_header), pes_fp);  //把PES包头写入文件
     fwrite(temp_p, 1, p-temp_p, pes_fp);                //把I帧写入文件
    }
    else
    {
     fwrite(pes_header, 1, sizeof(pes_header), pes_fp);  //把PES包头写入文件
     fwrite(temp_p, 1, p-temp_p+3, pes_fp);              //把I帧写入文件
    }
temp_p = NULL; 
    
    }
    
    if (p[3] == 0xB3)    //判断是否到了下一个序列头
    {
     temp_p = p;
     temp_que = 1;
    }
   }
   
   p++;
  }
  
  /*把多出来的内容写入下个BUF*/
  if(NULL != temp_p)
  {
   if (feof(iframe_fp))   //把最后一帧写入文件
   {
//    flag = 1;
    goto LAST_I; 
   }
   
   size = buf + iLen + size - temp_p; 
   memmove(buf, temp_p, size);  
  }
  else
  {
   size = buf + iLen + size - p;
   memmove(buf, p, size);
  }
  
  temp_p = NULL;
 } 
 
 printf("es_pes_END\n");
 
 fclose(iframe_fp);
 fclose(pes_fp);
 
 return 0;
}
/*打包成TS包*/
int pes_ts(char *tsfile, char *pesfile)
{
 FILE *ts_fp, *pes_fp;
 int flag = 0;
 int iLen = 0;
 int size = 0;
 int temp_pes = 0;
 int pes_packet_len = 0;
 unsigned char *p;
 unsigned char counter = 0;
 unsigned char *temp_p = NULL;
 unsigned char ts_buf[188] = {0};
 unsigned char start_indicator_flag = 0;
 
 pes_fp = fopen(pesfile, "rb");
 ts_fp = fopen(tsfile, "wb");
 if( ts_fp == NULL || pes_fp == NULL )
 {
  return -1;
 }
 
 /*设ts参数*/
 ts_buf[0] = 0x47;   
 ts_buf[1] = 0x62;
 ts_buf[2] = 0x81;
 
 while(!feof(pes_fp))
 {
  iLen = fread(buf+size, 1, sizeof(buf)-size, pes_fp);   //读文件
  p = buf;
  
  while( p + 6 < buf + iLen +size)
  {
   if (0 == p[0] && 0 == p[1] && 0x01 == p[2] && 0xE0 == p[3]) //进入
   {  
    if (flag == 0)  //第一次找到PES包
    {
     temp_p = p;
     flag = 1;
    }
    else
    {
     pes_packet_len = p - temp_p;   //pes包长度
     start_indicator_flag = 0; 
     while (1)
     {
      ts_buf[3] = counter;
      
      if (1 != start_indicator_flag)
      {
       ts_buf[1] = ts_buf[1] | 0x40;  //payload_unit_start_indicator置为1
       start_indicator_flag = 1;
      }
      else
      {
       ts_buf[1] = ts_buf[1] & 0xBF;  //payload_unit_start_indicator置为0
      }
      
      if (pes_packet_len > 184)   //打包成TS包(188)
      {
       ts_buf[3] = ts_buf[3] & 0xDF;
       ts_buf[3] = ts_buf[3] | 0x10;
       memcpy(&ts_buf[4], temp_p, 184);
       fwrite(ts_buf, 1, 188, ts_fp);   //写文件
       pes_packet_len -=184;
       temp_p += 184;
      }
      else                       //不够184B的加入调整字段,为空
      { 
       ts_buf[3] = ts_buf[3] | 0x30;
       ts_buf[4] = 183 - pes_packet_len;
       memcpy(&ts_buf[4] + 1 + ts_buf[4], temp_p, pes_packet_len);
       fwrite(ts_buf, 1, 188, ts_fp);   //写文件
         
       break;
      }
      
      counter = (counter + 1) % 0x10;      //ts包计数
     }  
    }
    temp_p = p; 
   }
   
   p++;
  }
  
  if (1 == flag)   
  {
   size = buf + iLen + size - temp_p; 
   memmove(buf, temp_p, size); 
   temp_p = NULL;
   flag = 0;
  }
  else
  {
   size =buf + iLen + size - p;
   memmove(m_buf , p , size);
  }  
 } 
 
 printf("pes_ts_END\n");
 
 fclose(pes_fp);
 fclose(ts_fp);
 return 0;
}
④ 求 单片机简单的C语言程序例子(越多越好)
我前几天刚在网上看到的,不知道对你有没有用》   
1. 闪烁灯 
1.  实验任务 
如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 
2.  电路原理图 
图4.1.1 
3.  系统板上硬件连线 
把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 
4.  程序设计内容 
(1). 延时程序的设计方法 
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 
 如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒 
 机器周期 微秒 
 MOV R6,#20 2个机器周期  2 
 D1: MOV R7,#248 2个机器周期  2       2+2×248=498 20× 
 DJNZ R7,$ 2个机器周期  2×248             498 
 DJNZ R6,D1 2个机器周期   2×20=40         10002 
 因此,上面的延时程序时间为10.002ms。 
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下: 
DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET 
(2). 输出控制 
如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 
5. 程序框图 
   如图4.1.2所示 
图4.1.2 
6. 汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}}
 2. 模拟开关灯 
1. 实验任务 
如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。 
2. 电路原理图 
图4.2.1 
3. 系统板上硬件连线 
 (1). 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上; 
 (2). 把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上; 
4. 程序设计内容 
 (1). 开关状态的检测过程 
单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。 
 (2). 输出控制 
如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 
5. 程序框图 
图4.2.2 
6. 汇编源程序 ORG 00HSTART: JB P3.0,LIGCLR P1.0SJMP STARTLIG: SETB P1.0SJMP STARTEND 
7. C语言源程序#include <AT89X51.H>sbit K1=P3^0;sbit L1=P1^0;void main(void){while(1){if(K1==0){L1=0; //灯亮}else{L1=1; //灯灭}}} 
3. 多路开关状态指示 
 1. 实验任务 
如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。 
 2. 电路原理图 
图4.3.1 
 3. 系统板上硬件连线 
 (1. 把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上; 
 (2. 把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上; 
 4. 程序设计内容 
 (1. 开关状态检测 
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。 
 (2. 输出控制 
根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。 
 5. 程序框图 
  
读P1口数据到ACC中 
ACC内容右移4次  
ACC内容与F0H相或  
ACC内容送入P1口  
<![endif]--> 
图4.3.2 
6. 方法一(汇编源程序)ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP STARTEND7. 方法一(C语言源程序)#include <AT89X51.H>unsigned char temp;void main(void){while(1){temp=P1>>4;temp=temp | 0xf0;P1=temp;}}8. 方法二(汇编源程序)ORG 00HSTART: JB P1.4,NEXT1CLR P1.0SJMP NEX1NEXT1: SETB P1.0NEX1: JB P1.5,NEXT2CLR P1.1SJMP NEX2NEXT2: SETB P1.1NEX2: JB P1.6,NEXT3CLR P1.2SJMP NEX3NEXT3: SETB P1.2NEX3: JB P1.7,NEXT4CLR P1.3SJMP NEX4NEXT4: SETB P1.3NEX4: SJMP STARTEND9. 方法二(C语言源程序)#include <AT89X51.H>void main(void){while(1){if(P1_4==0){P1_0=0;}else{P1_0=1;}if(P1_5==0){P1_1=0;}else{P1_1=1;}if(P1_6==0){P1_2=0;}else{P1_2=1;}if(P1_7==0){P1_3=0;}else{P1_3=1;}}} 
 先给你,传不上  太多了