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

📄 lcd.c

📁 单片机程序在线设计单片机程序在线设计单片机程序在线设计
💻 C
字号:
/*        本例介紹如何Turn ON 及Turn OFF LCD 全部位元組。程式流程如下:
          系統初始化→1622 啟動→點亮LCD 全部位元元→關閉HT1622。
          電路圖:參照HT1622 的規格書。                                        */
#include	"p33FJ64GP206.h"
#define uchar unsigned char
#define BIAS   0x52
#define SYSEN  0x02
#define LCDON  0x06
#define LCDOFF 0x04


#define cs  PORTBbits.RB7
#define wr  PORTBbits.RB9
#define dat PORTBbits.RB10
uchar a[32];

void SendBit_1622(uchar data,uchar cnt)     //data 的高cnt 位元寫入HT1622,高位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data&0x80)==0) dat=1;
else dat=0;
wr=0;
Nop();
wr=1;
data<<=1;
}
}

void SendDataBit_1622(uchar data,uchar cnt) //data 的低cnt 位寫入HT1622,低位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((data&0x01)==0) dat=1;
else dat=0;
wr=0;
Nop();
wr=1;
data>>=1;
}
}

void SendCmd(uchar command)
{
cs=0;
SendBit_1622(0x80,4);                      //寫入旗標碼”100”和9 位command 命令,由於
SendBit_1622(command,8);                   //沒有使有到更改時鐘輸出等命令,為了編程方便
cs=1;                                      //直接將command 的最高位寫”0”
}
void Write_1622(uchar addr,uchar data)
{
cs=0;
SendBit_1622(0xa0,3);                      //寫入旗標碼”101”
SendBit_1622(addr,6);                      //寫入addr 的高6 位元
SendDataBit_1622(data,4);                  //寫入data 的低4 位元
cs=1;
}
void WriteAll_1622(uchar addr,uchar *p,uchar cnt)
{
uchar i;
cs=0;
SendBit_1622(0xa0,3);                      //寫入旗標碼”101”
SendBit_1622(addr,6);                      //寫入addr 的高6 位元
for(i =0; i <cnt; i ++,p++)                //連續寫入資料
{    
SendDataBit_1622(*p,8);
}
cs=1; 
}

void LCD_int(void)
{   
	AD1PCFGH=0xffff;
	AD1PCFGL=0xffff;
	TRISBbits.TRISB7=0;
    TRISBbits.TRISB9=0;
    TRISBbits.TRISB10=0;


//	SendCmd(BIAS); //設置偏壓和工作週期
  //  SendCmd(SYSEN); //打開系統振盪器
    SendCmd(LCDON); //打開LCD 偏壓發生器
    
}

void main (void)
{
   	SRbits.IPL = 1;			    //CPU interrupt priority level is 1
	CORCONbits.IPL3 = 0;      	//CPU interrupt priority level is 7 or less
	INTCON1bits.NSTDIS = 0;	    //Interrupt nesting is enabled
SendCmd(LCDON); 
   uchar i;
  for (i=0;i<32;i++)
  a[i]=0x80;
     LCD_int();                              //將口設為輸出

//Write_1622(0x16,0x08);                     //0x24: (位址)的高6 位有效,
while (1)
{    SendCmd(LCDON);                                       //0x01: (資料)的低4 位元有效
WriteAll_1622(0,a,32);                      //0:(起始位址)高6 位有效,
//SendCmd(LCDOFF);
}                                        //a:(寫入資料的起始位址)8 位元都有效,
}                                           //6:為寫入的位元組數。連續寫入”123456789a”
// SendCmd(LCDOFF);                           //關閉LCD 顯示

⌨️ 快捷键说明

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