亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lcd.c

?? 該程序實現了LCD1602在AVR單片機上控制
?? C
字號:
//ICC-AVR application builder : 2007-7-25 上午 11:46:23
// Target : M16
// Crystal: 1.0000Mhz
//PORTD為數據輸出端,PORTB2,3, 4為指令端口

#include <iom16v.h>
#include <macros.h>

#define SET_LCD_E       PORTB|=0x04   // LCD: E = 1,PB2
#define CLR_LCD_E       PORTB&=~0x04  // LCD: E = 0,PB2
#define SET_LCD_RW      PORTB|=0x08   // LCD: R/W = 1 (read),PB3
#define CLR_LCD_RW      PORTB&=~0x08  // LCD: R/W = 0 (write),PB3
#define SET_LCD_RS      PORTB|=0x16   // LCD: R/S = 1 (data reg),PB4
#define CLR_LCD_RS      PORTB&=~0x16  // LCD: R/S = 0 (status reg),PB4
#define uchar unsigned char
#define uint unsigned int


#define DataPortfx      DDRD        //方向
#define Busy            0x80
#define LCM_Dataout     PORTD     // 輸出數據,可以根據需要來改變端口設置
#define LCM_Datain      PIND      // 讀入數據,可以根據需要來改變端口設置
unsigned char zifu;//全局變量,待顯示字符編碼
unsigned char huancun[16]={0};//顯存數組
void ReadStatusLCM(void);//聲明一邊以后調用
void WriteDataLCM(unsigned char WDLCM);
void WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC); 
void delay5ms(void);
void delayms(unsigned int n);
void delay40us(void);

void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

#pragma data:code
unsigned char const dxzm[]={"@ABCDEFGHIJKLMNOPQRSTUVWXYZ"};//0x40-0x5a
unsigned char const dxzm1[]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
                            0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,
							0x54,0x55,0x56,0x57,0x58,0x59,0x5a};
unsigned char const xxzm[]={"abcdefghijklmnopqrstuvwxyz"}; //0x61-0x7a
unsigned char const xxzm1[]={0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,
                            0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,
							0x75,0x76,0x77,0x78,0x79,0x7a};
unsigned char const shuzi[]={"0123456789:;<=>?"};//0x30-0x3f,,,//0x21-0x2f
unsigned char const shuzi1[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
                             0x3a,0x3b,0x3c,0x3d,0x3e,0x3f};
//unsigned char const kongzhizf[]={'!','"','#','$','%',''','(',')','*','+',',','-','.','/'};
//unsigned char const kongzhizf1[]={0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,
                               // 0x2a,0x2b,0x2c,0x2d,0x2e,0x2f};
unsigned char const cgramzf[]={
    0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,        //年,代碼 0x00
    0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,        //月,代碼 0x01
    0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00,        //日,代碼 0x02
    0x11,0x0a,0x04,0x1f,0x04,0x1f,0x04,0x00,        //$,代碼 0x03
    0x0e,0x00,0x1f,0x0a,0x0a,0x0a,0x13,0x00,        //元,代碼 0x04
    0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00,        //C,代碼 0x05
    0x04,0x0a,0x15,0x04,0x04,0x04,0x04,0x00,        //^,  代碼 0x06
    0x17,0x15,0x15,0x15,0x15,0x15,0x17,0x00        //10, 代碼 0x07
                               };
#pragma data:data

void CgramWrite(void)//裝載自定義字符
 {
    uint i;
    WriteCommandLCM(0x06,1);        // 指針自動加1
    WriteCommandLCM(0x40,1);        // CGRAM地址設置:從零地址開始
    for(i=0;i<64;i++)
	  {
       WriteDataLCM(cgramzf[i]);
      }
 }

void zhonechar(uchar k)//k表示任意字符,此程序實現將字符轉換為cgram地質馬
{
   uint i,j;
//  if(k==0x32)
 //   {
	// zifu=0x20;
	//}
//  else
//  {	
   for(i=0;dxzm[i]!=0;i++)//chazhaodxzm
     {
	    if(k==dxzm[i])
		 {
		  zifu=dxzm1[i];
		  break;
		 }
		else
		  ;
	 }
   for(i=0;xxzm[i]!=0;i++)//chazhaoxxzm
     {
	    if(k==xxzm[i])
		 {
		  zifu=xxzm1[i];
		  break;
		 }
		 else
		  ;
	 }
   for(i=0;shuzi[i]!=0;i++)//chazhaoshuji
     {
	    if(k==shuzi[i])
		 {
		  zifu=shuzi1[i];
		  break;
		 }
		else
		  ; 
	 }
/*  for(i=0;kongzhizf[i]!='';i++)//chazhaokongzhizifu
     {
	    if(k==kongzhizf[i])
		 {
		  zifu=kongzhizf1[i];
		  break;
		 }
		else
		 ;
	 }*/
 //}
}	
void zhlistchar(uchar *p) //轉換一組數據
{
   uint i=0;
   if(*p)
     {
        zhonechar(*p);
		huancun[i++]=zifu;//將轉換后的編碼放入顯存
		p++;
	 }
}
   
     
//寫數據
void WriteDataLCM(unsigned char WDLCM)
{
 DDRD=0xff;
 ReadStatusLCM(); //檢測忙
 LCM_Dataout = WDLCM;
 SET_LCD_RS;
 CLR_LCD_RW;
 asm("nop");
 asm("nop");
 CLR_LCD_E; //若晶振速度太高可以在這后加小的延時
 asm("nop");
 asm("nop");
 SET_LCD_E;
 asm("nop");//寫函數下降元有效
 asm("nop");
 asm("nop");
 CLR_LCD_E;
 asm("nop");
 //DDRA=0x00;

}

//寫指令
void WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC) //BuysC為0時忽略忙檢測
{
 DDRD=0xff;
 if (BuysC) 
   ReadStatusLCM(); //根據需要檢測忙
 LCM_Dataout=WCLCM;
 CLR_LCD_RS;
 CLR_LCD_RW;
 CLR_LCD_E;
 asm("nop");
 asm("nop");
 SET_LCD_E; 
 asm("nop");
 asm("nop");
 asm("nop");  
 CLR_LCD_E; 
 asm("nop");
 //DDRA=0x00;
 delay40us();
}

//讀數據
unsigned char ReadDataLCM(void)
{
 unsigned char t;
 DDRD=0x00;
 SET_LCD_RS; 
 SET_LCD_RW;
 asm("nop");
 asm("nop");
 CLR_LCD_E;
 asm("nop");
 asm("nop");
 asm("nop");
 SET_LCD_E;
 asm("nop");
 asm("nop");
 asm("nop");
 t=LCM_Datain;
 CLR_LCD_E;
 return(t);
}

//讀狀態
void ReadStatusLCM(void)
{
 DDRD=0x00; //輸入
 CLR_LCD_RS;//為低讀指令
 SET_LCD_RW;
 asm("nop");
 asm("nop");
 CLR_LCD_E;
 asm("nop");
 asm("nop");
 SET_LCD_E;
 asm("nop");
 asm("nop");
 asm("nop");
 asm("nop");
 while (LCM_Datain & Busy); //檢測忙信號
 CLR_LCD_E;
 DDRD=0xff;
//變回輸出
}

void LCMInit(void) //LCM初始化
{
 LCM_Dataout = 0;
 WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號
   delay5ms();asm("nop");asm("nop");
 WriteCommandLCM(0x38,0);//兩行顯示,5乘以7自付點陣;0x39則是一行顯示5乘以10點陣
   delay5ms();asm("nop");asm("nop");
 WriteCommandLCM(0x38,0);
   delay5ms();asm("nop");asm("nop");

 WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號
 asm("nop");
 WriteCommandLCM(0x08,1); //關閉顯示,光標,閃爍
 asm("nop");
 WriteCommandLCM(0x01,1); //顯示清屏,即清ddram和ac值;0x02光標,畫面回到初始位置
 asm("nop");
 WriteCommandLCM(0x06,1); // 顯示光標移動設置,ac加1,畫面不動
 asm("nop");
 WriteCommandLCM(0x0C,1); // 顯示開及光標設置,顯示開,光標,閃爍關
}

/*=======================================================
 顯示光標定位,ddram位置
=======================================================*/
void LocateXY( uchar posx,uchar posy) 
{

  uchar temp;

	temp=posx&0xf;
	posy&=0x1;
	if(posy)temp|=0x40;
	temp|=0x80;
	WriteCommandLCM(temp,0);
}

/*=======================================================
 按指定位置顯示數出一個字符
=======================================================*/
/*void DisplayOneChar(uchar x,uchar y,uchar Wdata) 
{

	LocateXY(x,y);				// 定位顯示地址
	WriteDataLCM(Wdata);			// 寫字符
}*/

//按指定位置顯示一個字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
   zhonechar(DData);
   Y &= 0x1;
   X &= 0xF; //限制X不能大于15,Y不能大于1
   if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
   X |= 0x80; //算出指令碼,指令最高位必須是1;
   WriteCommandLCM(X, 0); //這里不檢測忙信號,發送地址碼
   WriteDataLCM(zifu);
// WriteCommandLCM(X, 0); //光標返回,調節時很重要
}


/*=======================================================
 顯示字符串
=======================================================*/
void DisplayListChar(uchar x,uchar y,uchar *ptr )
 {
  uchar i,l=0;
    y&=0x1;
    x&=0xF; 
	while (ptr[l]>31)
	   {l++;}//統計字符串長度
	for (i=0;i<l;i++)
	   {
		DisplayOneChar(x++,y,ptr[i]);
		if (x==16)
		{
			x=0;
			y^=1;
		}
	  }
}
//按指定位置顯示一串字符
/*void DisplayListChar(unsigned char X, unsigned char Y, unsigned char const *DData)
{
 unsigned char ListLength;

  ListLength = 0;
 Y &= 0x1;
 X &= 0xF; //限制X不能大于15,Y不能大于1
 while (DData[ListLength]>0x20) //若到達字串尾則退出
  {
   if (X <= 0xF) //X坐標應小于0xF
    {
     DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符
     ListLength++;
     X++;
    }
  }
}
*/

//5ms延時
void delay5ms(void)
{
 unsigned int i=0;
 while(i<8)
  {
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
      i++;
 }
}

//n ms延時
void delayms(unsigned int n)
{
 unsigned int i;
 for(i=0;i<n;i++)
     delay5ms();
}

void delay40us(void)
{
   asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
   asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
   asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
   asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
   asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
/*=======================================================
演示一行連續zifu
=======================================================*/
void Display( uchar dd ) 
{

uchar i;

for(i=0;i<16;i++) 
{

DisplayOneChar(i,1,dd++);

dd&=0x7f;
if(dd<32)dd=32;
}
}



void main(void)
{
 unsigned  char i;
 uchar j=0;
 uchar char1[16]={"ILoveyou!"};
 port_init();
 DDRD=0XFF;//PA設為輸出
 DDRB=0XFF;//PB設為輸出
 delayms(95); //啟動等待,等LCM講入工作狀態
 LCMInit(); //LCM初始化
 delay5ms(); //延時片刻(可不要)
 WriteCommandLCM(0x38,1);//2 顯示,5乘以7點陣
 WriteCommandLCM(0x80,1); // 顯示光標移動設置
 //DisplayOneChar(0,0,'T');
 //DisplayOneChar(1,0,'t');
 //char1={"I Love you!"};
 //DisplayListChar(3,0,char1);
 CgramWrite(); //傳送自定義字符
 while(1)
 {
     DisplayOneChar(1,0,'2'); 
	 DisplayOneChar(2,0,'0'); 
	 DisplayOneChar(3,0,'0'); 
	 DisplayOneChar(4,0,'7'); 
     LocateXY(5,0);
	 WriteDataLCM(0x00);
	  // delayms(300);
	 DisplayOneChar(7,0,'7'); 
	 LocateXY(8,0);
	 WriteDataLCM(0x01);
	 DisplayOneChar(9,0,'2');
	 DisplayOneChar(10,0,'6');
	 LocateXY(11,0);
	 WriteDataLCM(0x02); 
	 LocateXY(6,1);
	 WriteDataLCM(0x32); 
	  LocateXY(7,1);
	 WriteDataLCM(0x33); 
	 DisplayOneChar(10,1,'2'); 
	   delayms(100);
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久| 777亚洲妇女| av高清久久久| 99精品欧美一区二区三区小说| 成人免费观看男女羞羞视频| 国产成人自拍高清视频在线免费播放| 日韩成人一区二区三区在线观看| 日韩高清不卡一区二区| 免费的国产精品| 国产91精品精华液一区二区三区| 丁香天五香天堂综合| 99久久久无码国产精品| 91精品欧美综合在线观看最新| 日韩三级伦理片妻子的秘密按摩| 精品国产一区二区三区av性色 | 国产精品一区久久久久| av不卡在线播放| 欧美一级黄色录像| **欧美大码日韩| 美国毛片一区二区| 欧洲中文字幕精品| 中文字幕乱码日本亚洲一区二区| 亚洲午夜激情网页| aaa亚洲精品| 欧美电影免费观看高清完整版在线| 久久九九久精品国产免费直播| 亚洲综合精品自拍| 国产成人免费9x9x人网站视频| 欧美日韩黄色一区二区| 亚洲影视资源网| 在线观看欧美日本| 亚洲综合在线观看视频| 色视频成人在线观看免| 成人网男人的天堂| 亚洲精品中文字幕在线观看| 欧美成人激情免费网| 亚洲香蕉伊在人在线观| 成人动漫一区二区三区| 中文字幕一区二区在线播放 | 精品一区二区免费视频| 欧美不卡视频一区| 国产风韵犹存在线视精品| 久久综合网色—综合色88| av中文字幕在线不卡| 一区二区三区精品| 日韩一区二区影院| 99久久伊人精品| 首页国产欧美日韩丝袜| 久久综合九色综合久久久精品综合| 精品一二三四在线| 亚洲精品国产视频| 日韩欧美区一区二| 91丨九色丨蝌蚪丨老版| 极品尤物av久久免费看| 亚洲精品免费播放| 日韩午夜激情电影| 在线观看中文字幕不卡| 国产美女主播视频一区| 亚洲午夜激情网页| 国产欧美日韩精品一区| 欧美成人r级一区二区三区| jlzzjlzz国产精品久久| 日本va欧美va瓶| 免费观看久久久4p| 天天综合色天天综合| 亚洲精品菠萝久久久久久久| 久久久综合视频| 亚洲国产精品成人综合| 久久蜜桃一区二区| 国产欧美视频一区二区三区| 精品国产伦一区二区三区观看体验 | 国产剧情一区二区| 韩国v欧美v日本v亚洲v| 极品销魂美女一区二区三区| 久久精品国产第一区二区三区| 午夜视频在线观看一区二区三区| 亚洲精品亚洲人成人网| 亚洲午夜一区二区三区| 亚洲主播在线观看| 久久国产精品99精品国产 | 裸体一区二区三区| 国内偷窥港台综合视频在线播放| 激情成人午夜视频| 成人h动漫精品一区二区| 91婷婷韩国欧美一区二区| 91福利资源站| 欧美激情综合五月色丁香小说| 中文字幕中文字幕在线一区| 一区二区三区国产精华| 久久91精品国产91久久小草| eeuss国产一区二区三区| 欧美午夜视频网站| 欧美极品美女视频| 人人精品人人爱| 91九色最新地址| 国产日产欧产精品推荐色| 亚洲3atv精品一区二区三区| 99久久精品免费| 欧美激情在线看| 国产在线播放一区三区四| 欧美日韩国产中文| 亚洲欧美日韩国产中文在线| 国产成人在线观看| 国产亚洲精品资源在线26u| 日本在线不卡一区| 日韩一级片网站| 日韩精品成人一区二区三区| 色女孩综合影院| 亚洲色图丝袜美腿| 91欧美激情一区二区三区成人| 久久蜜桃av一区二区天堂| 国产精品综合在线视频| 久久先锋资源网| 国产成人免费视频网站高清观看视频| 精品国产凹凸成av人导航| 国模套图日韩精品一区二区| xnxx国产精品| av在线综合网| 三级亚洲高清视频| 久久久一区二区三区捆绑**| 成人午夜在线播放| 亚洲自拍偷拍欧美| 久久久www成人免费毛片麻豆 | 欧美sm极限捆绑bd| 成人黄色在线看| 午夜久久久久久| 久久婷婷国产综合国色天香| eeuss鲁一区二区三区| 亚洲福利电影网| 成人免费一区二区三区视频 | 欧美精品日韩一本| 成人激情小说乱人伦| 日韩国产欧美在线视频| 中文av一区二区| 国产亚洲精久久久久久| 在线精品国精品国产尤物884a| 国产一区二区0| 午夜国产不卡在线观看视频| 欧美激情中文字幕一区二区| 在线不卡一区二区| 欧美日本一区二区| 欧美午夜视频网站| 欧美三级中文字幕| 欧美视频一区二区三区| 色综合天天综合网国产成人综合天 | 五月天一区二区| 樱桃国产成人精品视频| 一区二区三区精品视频| 亚洲午夜一区二区三区| 夜夜操天天操亚洲| 亚洲综合免费观看高清在线观看| 国产精品―色哟哟| 亚洲精品菠萝久久久久久久| 亚洲精品久久久蜜桃| 亚洲午夜成aⅴ人片| 日本91福利区| 国产成人精品亚洲777人妖| 成人性视频免费网站| 成人av免费在线观看| 色婷婷av一区二区三区软件 | 狠狠色丁香久久婷婷综合丁香| 老司机精品视频线观看86| 国产成人精品网址| 日本韩国欧美国产| 久久综合国产精品| 夜夜精品浪潮av一区二区三区| 视频一区二区三区在线| 国产综合成人久久大片91| 一本色道a无线码一区v| 日韩午夜激情视频| 亚洲综合成人网| 99综合电影在线视频| 91精品国产乱| 午夜在线电影亚洲一区| 国产999精品久久久久久绿帽| 在线观看日韩一区| 亚洲欧洲国产日韩| 国产福利精品导航| 欧美成人三级在线| 奇米一区二区三区av| 欧美日韩一区视频| 亚洲一区二区黄色| 91精品91久久久中77777| 国产精品国产自产拍高清av| 国产精品国产三级国产有无不卡 | 亚洲.国产.中文慕字在线| 韩国av一区二区三区| 久久中文字幕电影| 成人午夜精品一区二区三区| 精品日韩在线一区| 国产精品一区一区三区| 欧美激情中文字幕| 成人在线视频首页| 亚洲激情综合网| 欧美性生活一区| 欧美aaaaaa午夜精品| 亚洲国产精华液网站w | 亚洲bt欧美bt精品| 欧美tickle裸体挠脚心vk| 成熟亚洲日本毛茸茸凸凹|