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

📄 avrcomm.c

📁 avr串口通讯和74HC驱动程序C语言编写绝对正确
💻 C
字号:
#include <iom8v.h>

void init(void);
void dis_record(int);
void putchar( unsigned char c);
unsigned char getchar(void);
void uart_init(void);
void receive(void);
void speak(int);

char seven_seg[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F
,0X6F};
unsigned char ge1,shi1,bai1;
int gamescore,gamerecord;
void main(void)
{
 	 init();
	 while(1)
	 {
	  		 dis_record(gamerecord);
			 receive();
			 putchar(0x0F);
			 speak(gamescore);	
    		 if(gamescore>=gamerecord)
			 gamerecord=gamescore; 
	 }
	 
}
void init(void)
{
 	 ge1=0;
	 shi1=0;
	 bai1=0;
	 gamescore=0;
	 gamerecord=456;
 	 uart_init();
}
void speak(int game_score)
{
 	 ;
}
void receive(void)
{
 	 unsigned int i ,j;
	 unsigned char temp;	 
  	 temp=getchar();////////////////////////////////
    ge1=temp;
	 for(i=0;i<=1000;i++)
	 {
    	  for(j=0;j<=100;j++)
	      ;
	 }
  	  temp=getchar();////////////////////////////////
	 shi1=temp;
	 for(i=0;i<=1000;i++)
	{
	       for(j=0;j<=100;j++)
			;
	 }			  
  	temp=getchar();////////////////////////////////
	bai1=temp;
	for(i=0;i<=1000;i++)
	{
	     for(j=0;j<=100;j++)
		;
	}	
	gamescore=100*bai1+10*shi1+ge1;		  
}
 
 ///////////////////////////////////////////////////////////////////////////////////////
 void uart_init(void)
{
/* 设置波特率*/
UBRR = 51;
UCSRB = (1<<RXEN)|(1<<TXEN);
/* 设置帧格式: 8 个数据位, 1个停止位*/
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
//////////////////////////////////////////////////////////////////////////////////////
 void putchar( unsigned char c)
{
	while(!(UCSRA&(1<<UDRE)));
	 UDR=c;
}
//////////////////////////////////////////////////////////////////////////////////
unsigned char getchar(void)
{
 		 while(!(UCSRA&(1<<RXC)));
		 return UDR;


}
 //////////////////////////////////////////////////////////////////////////////////
 
 void dis_record(int game_record)
{
 	 char ge,shi,bai;	
	 ge=game_record%10;
	 shi=game_record%100;
	 shi=game_record/10;	
	 bai=game_record/100;		
	   	
    DDRC=0x3F;
    PORTC&=0XF7;//CLR-C3=0
    PORTC|=0X08;//CLR-C3=1	
   PORTC&=0XEF;//G-C4=0
   
   PORTC&=0XDF;//CLK-C5=0             //写入百位的bit7
	if(seven_seg[bai]&0x80)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x80)
  PORTC|=0X02;//I2=1	
 	else 
  PORTC&=0XFD;//I2=0  
	if(seven_seg[ge]&0x80)
  PORTC|=0X01;//I3=1
 	else 
  PORTC&=0XFE;//I3=0 
  
 PORTC|=0X20;//CLK-C5=1	第0次脉冲
 PORTC&=0XDF;//CLK-C5=0	第1次脉冲                 //写入百位的bit6
	if(seven_seg[bai]&0x40)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x40)
  PORTC|=0X02;//I2=1
 	else 
  PORTC&=0XFD;//I2=0 
	if(seven_seg[ge]&0x40)
 PORTC|=0X01;//I3=1
 	else 
 PORTC&=0XFE;//I3=0  
 PORTC|=0X20;//CLK-C5=1

 PORTC&=0XDF;//CLK-C5=0	第2次脉冲                 //写入百位的bit5
	if(seven_seg[bai]&0x20)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x20)
  PORTC|=0X02;//I2=1
 	else 
  PORTC&=0XFD;//I2=0 
	if(seven_seg[ge]&0x20)
 PORTC|=0X01;//I3=1
 	else 
 PORTC&=0XFE;//I3=0  
 PORTC|=0X20;//CLK-C5=1	
 
 PORTC&=0XDF;//CLK-C5=0	第3次脉冲                 //写入百位的bit4
	if(seven_seg[bai]&0x10)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x10)
  PORTC|=0X02;//I2=1
 	else 
  PORTC&=0XFD;//I2=0 
	if(seven_seg[ge]&0x10)
 PORTC|=0X01;//I3=1
 	else 
 PORTC&=0XFE;//I3=0  
 PORTC|=0X20;//CLK-C5=1	
 
 PORTC&=0XDF;//CLK-C5=0	第4次脉冲                 //写入百位的bit3
	if(seven_seg[bai]&0x08)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x08)
  PORTC|=0X02;//I2=1
 	else 
  PORTC&=0XFD;//I2=0 
	if(seven_seg[ge]&0x08)
 PORTC|=0X01;//I3=1
 	else 
 PORTC&=0XFE;//I3=0  
 PORTC|=0X20;//CLK-C5=1	

 PORTC&=0XDF;//CLK-C5=0	第5次脉冲                 //写入百位的bit2
	if(seven_seg[bai]&0x04)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x04)
  PORTC|=0X02;//I2=1
 	else 
  PORTC&=0XFD;//I2=0 
	if(seven_seg[ge]&0x04)
 PORTC|=0X01;//I3=1
 	else 
 PORTC&=0XFE;//I3=0  
 PORTC|=0X20;//CLK-C5=1	
 
 PORTC&=0XDF;//CLK-C5=0	第6次脉冲                 //写入百位的bit1
	if(seven_seg[bai]&0x02)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x02)
  PORTC|=0X02;//I2=1
 	else 
  PORTC&=0XFD;//I2=0 
	if(seven_seg[ge]&0x02)
 PORTC|=0X01;//I3=1
 	else 
 PORTC&=0XFE;//I3=0  
 PORTC|=0X20;//CLK-C5=1	 
 
  PORTC&=0XDF;//CLK-C5=0	第7次脉冲                 //写入百位的bit0
	if(seven_seg[bai]&0x01)
  PORTC|=0X04;//I1=1
 	else 
  PORTC&=0XFB;//I1=0
	if(seven_seg[shi]&0x01)
  PORTC|=0X02;//I2=1
 	else 
  PORTC&=0XFD;//I2=0 
	if(seven_seg[ge]&0x01)
 PORTC|=0X01;//I3=1
 	else 
 PORTC&=0XFE;//I3=0  
 
 PORTC|=0X20;//CLK-C5=1	
  
 PORTC&=0XDF;//CLK-C5=0	
 PORTC|=0X20;//CLK-C5=1	 
 PORTC&=0XEF;
}

⌨️ 快捷键说明

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