📄 uartstring.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 + -