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

📄 cah.c

📁 与一个51单片机实验板的上位机通信程序
💻 C
字号:
#include"reg51.h"
#include<LCD1602.h> 
#include "lcd1602.c"
#include "hardware.h"
sbit P1_7= P1^7;
unsigned int c=0;
unsigned char code_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
                          0x80,0x90};
unsigned char mark=0;
unsigned int swit=0;
int i,k,m,led=0,lednum=0,lcd=0;
char x=0x40,l=0;

init_rs232(void)/*初始化串行端口*/
{
SCON=0X50;	//设定串行接口工作模式1,允许接收数据
TMOD=0X20;	//设定计时器1 工作模式2
TH1=0XFD;	//设定波特率为9600BPS(用在普通89C51上,11.0592MHZ)
TR1=1;		//启动计时器1开始计数
//TI=1;		//发送准备好
}

void delay(unsigned int  n)  //延时
{
  unsigned int  i=0;
  unsigned char y;
           
  for(i=0; i<n; i++);
  for(y=0; y<0; y++);

}

void kk(){

 if(c==255){
 	mark=0;
	led=0;
	swit=0;
	P1=0xff;
	P0=0xff;
	
	return ;
 }
 if(mark==0){
	mark=c;
	if(mark==4){
		P1_7=~P1_7;
	}
	return ;
 }else if(mark==1){//LED模式
 	switch(c){
            case 0: P0=0xff;  break;   //LED1亮
			case 1: P0=0xfe;  break;   //LED2亮
			case 2: P0=0xfd;  break;   //LED3亮
			case 3: P0=0xfb;  break;   //LED4亮
			case 4: P0=0xf7;  break;   //LED5亮
			case 5: P0=0xef;  break;   //LED8亮
			case 6: P0=0xdf;  break;   //LED6亮
			case 7: P0=0xbf;  break;   //LED7亮
			case 8: P0=0x7f;  break;   //LED8亮
            case 9: P0=0xff;  break;   //全灭
            case 10: P0=0;    break;   //全亮 
  			default: break;
			}
 }else if(mark==2){//数码管模式
	if(led<2){
		swit=c;
		led=2;
	}else{
		led=1;
		swit=c*200+swit;
	}

 }else if(mark==3){//液晶屏模式
        // lcd=1;
 }else if(mark==4){//蜂鸣
 	P1_7=~P1_7;
 }

}
serial() interrupt 4 using 1  //串口中断程序
{

if(RI==1)  //接收中断
  {
  RI=0;    //清标志位
  c=SBUF;  //把接收到的数据发到缓冲区,引起发送中断,把收到的数据发回去
   kk();  
  }
if(TI==1) //发送中断
  {
  TI=0;  //清标志
  //SBUF=c; //C的数据装到缓冲区
  }
}



void main()
{

P0=0xff;
P1=0Xff;
init_rs232();
IE=0x90;
//LCD_cls();
//LCD_initial();
mark=0;
	led=0;
	swit=0;
	P1=0xff;
	P0=0xff;

while(1)
 {

if(mark==2 && led>0){

	 P0=code_Tab[swit%10];
	  P1=0xf7;
	delay(300);
	
	P1=0xff;
	  P0=code_Tab[(swit/10) % 10];
  	P1=0xfb;
	delay(300);
	P1=0xff;
	 
	  P0=code_Tab[(swit/100) % 10];
 	P1=0xfd;
	delay(300);
	P1=0xff; 
	  P0=code_Tab[(swit/1000) % 10];
 	P1=0xfe;
	delay(300);
	P1=0xff;	
}else if(lcd ==1){

   // LCD_printc('i');
    //return;
}
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -