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

📄 iar15-2.c

📁 手把手教你学AVR单片机C程序设计实验程序
💻 C
字号:
#include <iom16.h>	
#include<intrinsics.h>
#define uchar unsigned char	
#define uint unsigned int
//-------------------------------
#define SET_BIT(x,y) (x|=(1<<y))
#define CLR_BIT(x,y) (x&=~(1<<y))
#define GET_BIT(x,y) (x&(1<<y))
#define PB0 0
#define PB1 1
#define PB2 2
#define PB3 3
#define PB4 4
#define PB5 5
#define PB6 6
#define PB7 7
//---------------引脚电平的宏定义
#define RS_1 SET_BIT(PORTB,PB0)	 
#define RS_0 CLR_BIT(PORTB,PB0) 
#define RW_1 SET_BIT(PORTB,PB1)	 
#define RW_0 CLR_BIT(PORTB,PB1)
#define EN_1 SET_BIT(PORTB,PB2)	 
#define EN_0 CLR_BIT(PORTB,PB2) 
#define CS1_1 SET_BIT(PORTB,PB3)	  
#define CS1_0 CLR_BIT(PORTB,PB3) 
#define CS2_1 SET_BIT(PORTB,PB4)	 
#define CS2_0 CLR_BIT(PORTB,PB4)
#define RST_1 SET_BIT(PORTB,PB5)	 
#define RST_0 CLR_BIT(PORTB,PB5) 
//======================================
#define DataPort PORTA		//端口定义,双向数据总线。
#define xtal 8   				

void Delay_1ms(void)		//1mS延时子函数
{ uint i;
 for(i=1;i<(uint)(xtal*143-2);i++)
;
}
//====================================
void Delay_nms(uint n)		//n*1mS延时子函数
{
 uint i=0;
   while(i<n)
   {Delay_1ms();
    i++;
   }
}
/**********函数声明列表*************/
void Delay_1ms(void);
void Delay_nms(uint n);		
void wcode(uchar c,uchar sel_l,uchar sel_r);
void wdata(uchar c,uchar sel_l,uchar sel_r);
void set_startline(uchar i);			
void set_xy(uchar x,uchar y);			
void dison_off(uchar o);				
void reset(void);						
void m16_init(void);
void lcd_init(void);					
void lw(uchar x, uchar y, uchar dd);
void display_hz(uchar x, uchar y, uchar n, uchar fb);
__flash uchar hz[];						
/*************主函数*************/
void main(void)	
{								
uchar loop,line;						
m16_init();			
lcd_init();			                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
Delay_nms(1000);		
/************************************/
for(loop=0;loop<8;loop++)			
{display_hz(2*loop,0,loop,0);}	
//--------------------------------
for(loop=0;loop<8;loop++)			
{display_hz(2*loop,2,loop+8,0);}	
//-------------------------------
for(loop=0;loop<8;loop++)		
{display_hz(2*loop,4,loop+16,0);}
//-------------------------------	
for(loop=0;loop<8;loop++)
{display_hz(2*loop,6,loop+24,0);}
/***********************************/
for(;;)
{
Delay_nms(150);	
if(++line>63)line=0;
set_startline(line);	
}							
}								
/*----------------ATMEGA16L初始化子函数。-----------------------*/
void m16_init(void)
{
PORTA=0x00;
DDRA=0xff;
PORTB=0x00;
DDRB=0xff;
}
/*---------------判LCM忙子函数---------------*/
void lcd_busy(void)      		
{
uchar val;                     	
RS_0;__no_operation();__no_operation();
RW_1;__no_operation();__no_operation();
DataPort=0x00;					
 	while(1)
	{							
	EN_1;__no_operation();  __no_operation();  
	DDRA=0x00;
	val=PINA;			 		
	if(val<0x80) break;      	
	EN_0;__no_operation();  __no_operation();  			
	}
DDRA=0xff;             			
EN_0;__no_operation();__no_operation();          			
}                    			
/*--------------写指令到LCM子函数---------------*/
void wcode(uchar c,uchar sel_l,uchar sel_r) 
{	
if(sel_l==1)CS1_1;
else CS1_0;						
__no_operation();__no_operation();               		
if(sel_r==1)CS2_1;
else CS2_0;
__no_operation();__no_operation();					
lcd_busy();						
RS_0;__no_operation();__no_operation();					
RW_0;__no_operation();__no_operation();					
DataPort=c;						
EN_1;__no_operation();__no_operation();					
EN_0;__no_operation();__no_operation();					
}								
/*---------------写数据到LCM子函数-------------*/
void wdata(uchar c,uchar sel_l,uchar sel_r) 
{								
if(sel_l==1)CS1_1;
else CS1_0;		
__no_operation();__no_operation();             
if(sel_r==1)CS2_1;
else CS2_0;                 
__no_operation();__no_operation();					
lcd_busy();						
RS_1;__no_operation();__no_operation();					
RW_0;__no_operation();__no_operation();					
DataPort=c;                   
EN_1;__no_operation();__no_operation();		
EN_0;__no_operation();__no_operation();			
}						
/*根据x、y地址定位,将数据写入LCM左半屏或右半屏的子函数*/
void lw(uchar x, uchar y, uchar dd)	
{								
if(x>=64) 						
{set_xy(x-64,y);				
wdata(dd,0,1);}		
else 						
{set_xy(x,y);				
wdata(dd,1,0);}			
}						
/*---------------设定起始行子函数--------------*/
void set_startline(uchar i) 	
{								
i=0xc0+i;					
wcode(i,1,1);				
}						
/*---------------定位x方向、y方向的子函数--------------*/
void set_xy(uchar x,uchar y) 	
{								
x=x+0x40;                      	
y=y+0xb8;                    	
wcode(x,1,1);                  
wcode(y,1,1);                  
}                             	
/*---------------屏幕开启、关闭子函数--------------*/
void dison_off(uchar o) 		
{                              	
o=o+0x3e;                    	
wcode(o,1,1);                
}                              
/*---------------复位子函数---------------*/
void reset(void)                
{                       		
RST_0;                     	
Delay_nms(10);				
RST_1;							
Delay_nms(10);				
}								
/*--------------LCM初始化子函数-------------*/
void lcd_init(void) 			
{uchar x,y;              		
reset();						
set_startline(0);				
dison_off(0);					
for(y=0;y<8;y++)				
	{							
	for(x=0;x<128;x++)lw(x,y,0);
	}							
dison_off(1);				
}						
/*---------------显示汉字子函数--------------*/
void display_hz(uchar xx, uchar yy, uchar n, uchar fb) 
{					
uchar i,dx;                     
for(i=0;i<16;i++)				
{dx=hz[2*i+n*32];				
if(fb)dx=255-dx;				
lw(xx*8+i,yy,dx);				
dx=hz[(2*i+1)+n*32];			
if(fb)dx=255-dx;			
lw(xx*8+i,yy+1,dx);			
}								
}											
/****************************汉字点阵码表*********************************/
__flash uchar hz[]=
{0x10,0x00,0x90,0x3F,0x90,0x10,0xFF,0x10,0x90,0x10,0x90,0x5F,0x10,0x41,0x80,0x20,
0xF0,0x20,0x1F,0x13,0x12,0x0C,0x10,0x13,0xF0,0x20,0x10,0x60,0x10,0x20,0x00,0x00,/*"故",0*/

0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x0C,0x00,0x03,0xC0,0x00,0x3F,0x00,
0xC2,0x01,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x20,0x00,0x00,/*"人",1*/

0x02,0x00,0xF2,0x7F,0x12,0x28,0x12,0x24,0x12,0x22,0xFE,0x21,0x12,0x20,0x12,0x20,
0x12,0x20,0xFE,0x21,0x12,0x22,0x12,0x22,0x12,0x22,0xF2,0x7F,0x02,0x00,0x00,0x00,/*"西",2*/

0x24,0x00,0x24,0x7E,0x24,0x22,0xFC,0x23,0x22,0x22,0x22,0x7E,0xA0,0x00,0x84,0x04,
0x94,0x04,0xA5,0x04,0x86,0xFF,0x84,0x04,0xA4,0x04,0x94,0x04,0x84,0x04,0x00,0x00,/*"辞",3*/

0x20,0x00,0x24,0x80,0x24,0x80,0xA4,0x5F,0xA4,0x32,0xBF,0x12,0xA4,0x12,0xE4,0x1F,
0xA4,0x12,0xBF,0x12,0xA4,0x32,0xA4,0x5F,0x24,0xC0,0x24,0x00,0x20,0x00,0x00,0x00,/*"黄",4*/

0x00,0x01,0x8C,0x00,0xE4,0xFF,0x5F,0x4A,0xD4,0x7F,0x64,0x4A,0x4C,0x4A,0x04,0x40,
0xFC,0x09,0x0E,0x09,0x35,0x09,0x04,0x09,0x44,0x49,0x7C,0x81,0x00,0x7F,0x00,0x00,/*"鹤",5*/

0x08,0x02,0x88,0x01,0x68,0x00,0xFF,0xFF,0x28,0x00,0x48,0x42,0x00,0x42,0x48,0x4A,
0x2A,0x2E,0x9C,0x33,0x7F,0x12,0x18,0x2E,0x2C,0x22,0x4A,0x42,0x48,0xC2,0x00,0x00,/*"楼",6*/

0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",7*/

0x80,0x40,0x70,0x30,0x00,0x0C,0xFF,0x03,0x20,0x0C,0x10,0x00,0xFE,0xFF,0x02,0x48,
0x22,0x44,0x22,0x43,0xFE,0x40,0x22,0x43,0x22,0x4C,0x02,0x40,0xFE,0xFF,0x00,0x00,/*"烟",8*/

0x04,0x00,0x04,0x02,0x04,0x01,0x84,0x00,0xF4,0xFF,0x2F,0x00,0x04,0x08,0x04,0x04,
0xE4,0x3F,0x0F,0x42,0x04,0x41,0xC4,0x40,0x84,0x40,0x04,0x78,0x04,0x20,0x00,0x00,/*"花",9*/

0x00,0x00,0x04,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,
0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0x04,0x20,0x00,0x20,0x00,0x00,/*"三",10*/

0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x0C,0xFF,0x03,0x11,0x01,0x11,0x01,
0x11,0x01,0x11,0x21,0x11,0x41,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"月",11*/

0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x7F,
0x22,0x00,0x62,0x00,0xC2,0x01,0x82,0x00,0x02,0x00,0x03,0x00,0x02,0x00,0x00,0x00,/*"下",12*/

0x08,0x02,0x08,0x42,0x08,0x81,0xFF,0x7F,0x88,0x00,0x48,0x08,0x02,0x48,0x42,0x44,
0x62,0x23,0xD2,0x10,0x4A,0x0C,0xC6,0x43,0x42,0x80,0x40,0x40,0xC0,0x3F,0x00,0x00,/*"扬",13*/

0x00,0x01,0xE0,0x80,0x00,0x60,0x00,0x18,0xFF,0x07,0x20,0x00,0xC0,0x00,0x00,0x00,
0xFE,0x7F,0x10,0x00,0x60,0x00,0x80,0x01,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,/*"州",14*/

0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"。",15*/

0x00,0x01,0x02,0x43,0x82,0x80,0xF2,0x7F,0x4A,0x00,0x26,0x40,0x02,0x30,0xFC,0x0F,
0x04,0x20,0xFC,0x7F,0x02,0x28,0xFE,0x71,0x02,0x26,0x02,0x18,0x00,0x30,0x00,0x00,/*"孤",16*/

0x00,0x00,0xF8,0x07,0x08,0x00,0xFF,0xFF,0x08,0x04,0xF8,0x87,0x00,0x60,0xFE,0x1F,
0x42,0x00,0x82,0x03,0x02,0x01,0xFE,0x3F,0x00,0x40,0x00,0x40,0x00,0x78,0x00,0x00,/*"帆",17*/

0x40,0x00,0x42,0x40,0x4C,0x20,0xC4,0x1F,0x20,0x20,0x22,0x48,0x22,0x44,0xE2,0x43,
0x22,0x40,0x22,0x40,0xE2,0x47,0x22,0x48,0x22,0x48,0x20,0x48,0x20,0x4E,0x00,0x00,/*"远",18*/

0x40,0x40,0x5F,0x27,0x55,0x55,0x55,0x85,0x75,0x7D,0x55,0x05,0x55,0x15,0x5F,0x67,
0x40,0x20,0x00,0x80,0x20,0x44,0x10,0x22,0x8C,0x11,0xE7,0x0C,0x42,0x08,0x00,0x00,/*"影",19*/

0x00,0x00,0x42,0x21,0x4A,0x11,0x4A,0x09,0x7E,0xFD,0x4A,0x4B,0x42,0x49,0x00,0x49,
0x7E,0x49,0x4A,0x49,0x4B,0x49,0x4A,0x49,0x4A,0xF9,0x7E,0x01,0x00,0x01,0x00,0x00,/*"碧",20*/

0x10,0x00,0x0C,0x40,0x84,0x40,0x44,0x41,0x24,0x41,0x14,0x41,0x05,0x41,0x06,0x7F,
0x04,0x41,0x14,0x41,0x24,0x41,0x44,0x41,0x84,0x40,0x14,0x40,0x0C,0x00,0x00,0x00,/*"空",21*/

0x00,0x08,0x00,0x04,0x00,0x03,0xFE,0x00,0x12,0x00,0x12,0x09,0x12,0x11,0x12,0x32,
0x72,0x66,0x92,0x00,0x12,0x01,0x12,0x02,0x1E,0x06,0x00,0x0C,0x00,0x04,0x00,0x00,/*"尽",22*/

0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",23*/

0x70,0x00,0x00,0x00,0xFF,0x7F,0x08,0x00,0x50,0x00,0x20,0x00,0xF8,0x7F,0x4F,0x22,
0x48,0x22,0x49,0x22,0xFE,0x3F,0x48,0x22,0x48,0x22,0x48,0x22,0x08,0x20,0x00,0x00,/*"惟",24*/

0x00,0x40,0x00,0x40,0x00,0x20,0xFF,0x21,0x01,0x10,0x01,0x0C,0x01,0x03,0xF9,0x00,
0x01,0x3F,0x01,0x40,0x01,0x40,0xFF,0x41,0x00,0x40,0x00,0x78,0x00,0x20,0x00,0x00,/*"见",25*/

0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFF,0xFF,0xA0,0x40,0xA0,0x21,0x90,0x12,
0x90,0x04,0x88,0x08,0x84,0x10,0x82,0x30,0x80,0x60,0x80,0x20,0x80,0x00,0x00,0x00,/*"长",26*/

0x10,0x04,0x60,0x04,0x01,0x7E,0xC6,0x01,0x30,0x20,0x00,0x20,0x04,0x20,0x04,0x20,
0x04,0x20,0xFC,0x3F,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,/*"江",27*/

0x00,0x00,0x40,0x80,0x42,0x40,0x42,0x20,0x42,0x10,0x42,0x08,0x42,0x06,0xFE,0x01,
0x42,0x02,0x42,0x04,0x42,0x08,0x42,0x10,0x42,0x30,0x42,0x60,0x40,0x20,0x00,0x00,/*"天",28*/

0xFE,0xFF,0x02,0x00,0x22,0x02,0x5A,0x04,0x86,0x13,0x20,0x0C,0x20,0x03,0x22,0x40,
0x22,0x80,0xE2,0x7F,0x22,0x00,0x22,0x01,0x22,0x02,0x22,0x1C,0x20,0x08,0x00,0x00,/*"际",29*/

0x10,0x04,0x60,0x04,0x01,0xFC,0x86,0x03,0x60,0x40,0x04,0x30,0x44,0x0F,0x64,0x00,
0x55,0x00,0x4E,0x7F,0x44,0x00,0x64,0x3F,0xC4,0x40,0x04,0x40,0x04,0x70,0x00,0x00,/*"流",30*/

0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*"。",31*/

⌨️ 快捷键说明

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