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

📄 uartstring.c

📁 在Atmega16上实现的UART实验 编译环境GCC
💻 C
字号:
#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 8000000
#define BAUD0  9600


/*const unsigned char *temp1="2009年04月28日学习验证UART模块!";//30
const unsigned char *temp2="2009年3月26日两个发送字符串函数通过验证!";//40
const unsigned char *temp3="打倒日本帝国主义,打倒法西斯!";//28
const unsigned char *temp4="欢迎访问AVR单片机小组http://group.ednchina.com/65/";//50
const unsigned char buffer1[]="欢迎访问http://blog.ednchina.com/xiantaozeng/";//45
const unsigned char buffer2[]="QQ:605987969";//12
const unsigned char buffer3[]="AVR单片机技术交流群:76083971";//28
*/
const unsigned char erwei[6][42]={ 
                               "2009年04月28日学习验证UART模块!",
							   "2009年3月26日两个发送字符串函数通过验证!",
							   "打倒日本帝国主义,打倒法西斯!",
							   "欢迎访问AVR单片机小组http://group.ednchina.com/65/",
							   "QQ:605987969",
							   "AVR单片机技术交流群:76083971"
                                                           };
void delay_ms(int time)
{
 int i;
 for(;time>0;time--)
  for(i=0;i<1000;i++);
}
void delay_us(int time)
{
 int i;
 for(;time>0;time--)
  for(i=0;i<100;i++);
}

void UART_Transmit( unsigned char data )//发送一个字符
{
 while ( !( UCSRA & (1<<UDRE)) ) ; //发送寄存器为空
 UDR = data;  
 delay_us(5);             
} 

void UART_Transmitstring(unsigned char *str) //字符串
{
  while (*str)
  {
    UART_Transmit(*str);
    str++;
  }
}
unsigned char UART_Receive( void ) // 接收一个字符
{
while ( !(UCSRA & (1<<RXC)) ); 
return UDR;                     
}

void newline()   //换行
{
   UART_Transmit(0x0d);  //发送一个回车
   UART_Transmit(0x0a);  //发送一个换行
}

void blank()    //空格
{
   UART_Transmit(0x20);  
}

void lossen_key(void)
 {
  while(!(PINB&(1<<1)));
  delay_ms(20);
 }

 int display(int x)
{
 int i,k,t;
 unsigned char duan[]={0x0C,0xCF,0x25,0x85,0xC6,0x94,0x14,0xCD,0x04,0x84};
  
 unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20};//共有六位
   
 unsigned char  w[6];//设定扫描的个数
  
 
   DDRC=0xff;//置PC口为输入,为段选线
   DDRA=0xff;//置PD口为输入,为位选线

   w[2]=x/1000;//千位
   w[3]=x%1000/100;//百位
   w[4]=x%100/10;//十位
   w[5]=x%10;//个位
   
      for(i=0;i<10;i++)
	            for(k=2;k<6;k++)
	           {
	            PORTA=wei[k];

	            PORTC=duan[w[k]];
               // delay_ms(2);
	
	         for(t=0;t<100;t++);//调节数码管的亮度		
	           }
       
}
int main(void)
   {unsigned char i=0;
    DDRB&=~(1<<1);
    PORTB|=(1<<1); //上拉 
   UBRRH=(F_CPU/BAUD0/16-1)/256;//设置波特率
   UBRRL=(F_CPU/BAUD0/16-1)%256;
   UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//使能发送,接收,接收中断使能
    sei();

 volatile char rev_date;
  while(1)
      {

	if(!(PINB&(1<<1)))
	      {
		  delay_ms(20);
               if(!(PINB&(1<<1)))
				 {
				  UART_Transmitstring(erwei[i]);
				  newline();
				  lossen_key();
				  i++;
				  }
	      }
      if(i>5)
	   i=0;
	 /*	if(UCSRA&(1<<RXC))    //如果接收缓存区有数据

      { i=UART_Receive(); //接收数据
       UART_Transmit(i); //发送数据       
	   display(i);
       }
  
  SIGNAL(SIG_UART_RECV)
       {	   
	   rev_date=UDR;	   		   
	   }
    
  */

     }
 }

⌨️ 快捷键说明

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