2012年8月8日
/************************************************* 2012年5月1日
功能:实现两单片机之间通讯,并且在LCD12864显示 开发环境:ICCAVR 液晶显示成功
**************************************************/ #include
#include\#define uint unsigned int #define uchar unsigned char
#pragma interrupt_handler USART_RXC_vect:12
// 中断函数声明 #define fosc 8000000 #define baud 9600
/************************************************* 端口初始化
***************************************************/ void port_init(void) {
PORTA=0XFF; DDRA=0XFF;
PORTC=0XFF; //液晶显示 DDRC=0XFF; PORTD=0X00;
DDRD|=(1< /******************************************************** 串口初始化函数 ******************************************************/ void uart0_init(void) { UCSRB=0X00;//控制与状态寄存器B UCSRA=0X00;//控制与状态寄存器A UCSRC|=(1< // UMSEL=0 USBS=0 UPM1=0 UPM0=0 UCPOL=0 异步清零 //分别是选择UCSRC 寄存器 字符长度8位 异步模式 奇偶模式禁止 使用异步时清零 UBRRL=(fosc/16/(baud+1)%6); UBRRH=(fosc/16/(baud+1)/256); //设置波特率寄存器的初值 UCSRB|=(1< /**************************************************** 发送数据函数 ****************************************************/ void uart0_send(uchar i) { while(!(UCSRA&(1< //从串口中接收的数据进行存储 //因为初始化时UCSRA=0,当检测到UDRE=1,进行&运算 //特别注意此处的UCSRA是初始化的那个值,后面的UDRE是检测到的值 } /************************************************* 接收中断函数 ********************************************/ void USART_RXC_vect(void) { uchar Rev; //Rev=UDR; //USRAT I/O 数据寄存器UDR 读取数据 //uart0_send(Rev); //接收到的数据发送 //不用变量能把数据传送到位 PORTA=UDR; LocateXY(1,1); write_data(UDR); //从串口中接收的数据放在变量中,再发送到PC } /*************************************************** 发送字符串函数 发送字符串的函数模式 ******************************************************/ void Usart_Putstring(uchar *s) { while(*s) { uart0_send(*s++);//字符 } uart0_send(0x0D); uart0_send(0x0A);//结尾发送回车换行 } void main(void)// { port_init(); LCD_init(); uart0_init(); while(1); } 头文件: LCD_12864_chuankou.c /************************************** 头文件LCD12864 2012.5.19调试成功 串口数据传输 *****************************************/ #include #define uchar unsigned char #define uint unsigned int #define CS_0 PORTC&=~(1< #define SID_0 PORTC&=~(1< #define SCLK_0 PORTC&=~(1< #define PSB_0 PORTC&=~(1< #define RST_0 PORTC&=~(1< //#define Dataport PORTA //数据端口为A口 void delay(uint ms) //系统延时函数 { uint i,j; for(i=0;i for(j=0;j<1140;j++); } } void delay_us(uint n)// 最小延时 { if(n==0) return; while(--n); } /******************************************* 发送字节函数 写入一个字节 *******************************************/ void sendbyte(uchar byte) { uchar i; // for(i=0;i<8;i++) //少写的数据 { if(byte&0x80) //判断应写入1或者0 {SID_1;} else {SID_0;} SCLK_1; SCLK_0; byte<<=1; //左移 } } /**************************************** 写指令函数规定写指令操作 *****************************************/ void write_com(uchar com) //command { uchar start_data,Hdata,Ldata; start_data=0xf8; //写命令 Hdata=com&0xf0; //取高四位 Ldata=(com<<4)&0xf0; //取低四位 sendbyte(start_data);// 发送起始信号 delay_us(1); sendbyte(Hdata);//发送高四位 delay_us(1); sendbyte(Ldata);//发送低四位
相关推荐: