ht1621b和单片机电平匹配_现代单片机与LCDHT1621b联用程序

这篇博客详细介绍了如何使用MC96F8316单片机与HT1621b LCD模块进行电平匹配和通信。通过定义相关寄存器和函数,如`SendBit_1621`和`SendCmd_1621`,实现了单片机向LCD发送指令和数据的功能。还包含了延时函数以确保正确的时间间隔。
摘要由CSDN通过智能技术生成

//======================================================

// Main program routine

// - Device name : MC96F8216

// - Package type : 20SOP

//======================================================

// For XDATA variable : V1.041.00 ~

#defineMAIN1

// Generated : Thu, May 05, 2016 (10:05:33)

#include"MC96F8316.h"

#include"func_def.h"

#include"Intrins.h"

#define uchar unsigned char

#define uint unsigned int

#define ComMode 0x52 //4COM,1/3bias 1000 010 1001 0

#define RCosc 0x30 //??RC???(????)1000 0011 0000

#define LCD_on 0x06 //??LCD ?????1000 0000 0 11 0

#define LCD_off 0x04 //??LCD??

#define Sys_en 0x02 //?????? 1000 0000 0010

#define CTRl_cmd 0x80 //?????

#define Data_cmd 0xa0 //?????

#define sbi(x, y) (x |= (1 &lt&lt y)) /*????x??y?*/

#define cbi(x, y) (x &= ~(1 &lt&lty )) /*????x??y?*/

#define DATA1 sbi(P1, 1)

#define DATA0 cbi(P1, 1)

#define WR1 sbi(P1, 2)

#define WR0 cbi(P1, 2)

#define CS1 sbi(P2, 1)

#define CS0 cbi(P2, 1)

char dispnum[5]={0x00,0x00,0x00,0x00,0x00,};

/*0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,H,h,L,n,N,o,P,r,t,U,-, ,*/

const char num[]={0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x4F,0x1D,0x0E,0x6E,0x1F,0x17,0x67,0x47,0x0D,0x46,0x75,0x37,0x06,0x0F,0x6D,0x02,0x00,};

/*?????*/

void delay_1us(void) //1us????

{

_nop_();

}

void delay_nus(unsigned int n) //N us????

{

unsigned int i=0;

for(i=0;i&ltn;i++) //1nop=12/8M(1.5us) 667*1.5us=1ms

{

_nop_();

}

}

void delay_1ms(void) //1ms????

{

unsigned int k;

for(k=667;k&gt0;k--) //1nop=12/8M(1.5us) 667*1.5us=1ms

{

_nop_();

}

}

void delay_nms(unsigned int n) //N ms????

{

unsigned int j,k;

for(j=n;j&gt0;j--)

{

for(k=667;k&gt0;k--) //1nop=12/8M(1.5us) 667*1.5us=1ms

{

_nop_();

}

}

}

/**-------------------------------------------------------------------------

Name: SendBit_1621(?????)

---------------------------------------------------------------------------*/

void SendBit_1621(uchar sdata,uchar cnt) //data ??cnt ???HT1621,????

{

uchar i;

for(i=0;i&ltcnt;i++)

{

WR0;

delay_nus(20); //8M???,4M???

if(sdata&0x80) DATA1;

else DATA0;

delay_nus(20);//8M???,4M???

WR1;

delay_nus(20); //8M???,4M???

sdata&lt&lt=1;

}

delay_nus(20);

}

/**-------------------------------------------------------------------------

Name: SendCmd(???)

---------------------------------------------------------------------------*/

void SendCmd_1621(uchar command)

{

CS0;

SendBit_1621(0x80,4); //??????00?9 ?command ??,??

SendBit_1621(command,8); //??????????????,??????

CS1; /

/***************************************************************************** *版权信息:深圳天微电子有限公司 *文 件 名:TM1621-V1.0 *当前版本:V1.0 *MCU 型号:STC12C5608AD *开发环境:Keil uVision4 *晶震频率:11.0592MHZ *完成日期:2013-08-07 *程序功能:1.LCD驱动:LCD屏显示0`F *免责声明:1.此程序为TM1621驱动LCD演示程序,仅作参考之用。 2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任 ********************************************************************************/ #include //MCU头文件 #include "intrins.h" //包含nop指令头文件 #define uchar unsigned char //数据类型宏定义 #define uint unsigned int //数据类型宏定义 #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义 /******************TM1621模块命令定义*********************/ #define SYSDIS 0x00 //关系统振荡器和LCD偏压发生器 #define SYSEN 0x02 //打开系统振荡器 #define LCDOFF 0x04 //关LCD偏压 #define LCDON 0x06 //开LCD偏压 #define TONEON 0x12 //打开声音输出 #define TONEOFF 0x10 //关闭声音输出 #define XTAL 0x28 //外部接晶振 #define RC 0x30 //内部RC振荡 #define BIAS 0x52 //1/3偏压 4公共口 #define WDTDIS 0x0a //禁止看门狗 #define WDTEN 0x0e //开启看门狗 /********************定义控制端口**********************/ sbit CS=P2^1; sbit READ=P2^7; sbit WRITE=P2^0; sbit DATA=P1^7; /********************定义数据*************************/ uchar code Smg[16]={0xeb,0x60,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e}; //0~F字型码 uchar code Tab0[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //清屏 /********************延时函数*************************/ void delay_nms(uint n) { uint i; while(n--) for(i=0;i<500;i++); } /********************从高位写入数据*************************/ void Write_Data_H(uchar Data, uchar Cnt) //Data的高cnt位写入TM1621,高位在前 { uchar i; for(i=0;i<Cnt;i++) { WRITE=0; if(Data&0x80;) //从最高位发送 DATA=1; else DATA=0; nop; nop; WRITE=1; Data<<=1; } WRITE=0; DATA=0; } /********************从低位写入数据*************************/ void Write_Data_L(uchar Data,uchar Cnt) //Data 的低cnt位写入TM1621,低位在前 { unsigned char i; for(i=0;i>=1; } WRITE=0; DATA=0; } /********************写入控制命令*************************/ void WriteCmd(uchar Cmd) { CS=0; nop; Write_Data_H(0x80,4); //写入命令标志100 Write_Data_H(Cmd,8); //写入命令数据 CS=1; nop; } /*********指定地址写入数据,实际写入后4位************/ void WriteOneData(uchar Addr, uchar Data) { CS=0; Write_Data_H(0xa0,3); //写入数据标志101 Write_Data_H(Addr<<2,6); //写入地址数据 Write_Data_L(Data,4); //写入数据 CS=1; nop; } /*********连续写入方式,每次数据为8位,写入数据************/ void WriteAllData(uchar Addr,uchar *p,uchar cnt) { uchar i; CS=0; Write_Data_H(0xa0,3); //写入数据标志101 Write_Data_H(Addr<<2,6); //写入地址数据 for(i=0;i<cnt;i++) //写入数据 { Write_Data_L(*p,8); p++; } CS=1; nop; } /*******************TM1621初始化**********************/ void TM1621_init() { CS=1; WRITE=1; DATA=1; nop; delay_nms(1); WriteCmd(BIAS); //1/3偏压 4公共口 WriteCmd(RC); //内部RC振荡 WriteCmd(SYSDIS); //关系统振荡器和LCD偏压发生器 WriteCmd(WDTDIS); //禁止看门狗 WriteCmd(SYSEN); //打开系统振荡器 WriteCmd(LCDON); //开LCD偏压 } void main() { TM1621_init(); //开机初始化 delay_nms(1); WriteAllData(0,Tab0,16); //LCD不显示 while(1) { WriteAllData(0,Smg,16); //LCD显示0~F delay_nms(200); WriteAllData(0,Tab0,16); //LCD不显示 delay_nms(200); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值