自己编写的HT1621B测试程序,参考了其他人的部分代码,包括基本的初始化设置,写数据,写命令,清屏,一笔一笔点亮LCD到全显等,程序后面有注释,位声明自己定义个人根据自己的硬件电路自己连接
单片机源程序如下:
- #define SYSEN 0x02//打开系统振荡器
- #define LCDON 0x06//打开LCD偏压发生器
- #define RC256 0x30//片内RC振荡器
- #define BIAS 0x52//LCD 1/3偏压 4个公共端口
- #define SYSDIS 0x00
- #define WDTDIS 0x0a
- sbit cs=P1^7;
- sbit rd=P3^2;
- sbit wr=P3^3;
- sbit dat=P3^4;
- uchar table[]={
- 0x0f,0x0f,0x0f,0x0f,
- 0x0f,0x0f,0x0f,0x0f,
- 0x0f,0x0f,0x0f,0x0f,
- 0x0f,0x0f,0x0f,0x0f,0x0f,};
- uchar table1[]={
- 0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xf0,};
- uchar table2[]={
- 0xe6,0xf8,0xb0,0xb0,0xbe,};
- uchar table3[]={
- 0x01,0x03,0x07,0x0f,};
- uchar table4[]={
- 0xde,0x22,0xfe,0x22,
- 0x0e,0x22,0xfa,0x22,
- 0xda,0x22,0xc6,0x22,
- 0x5e,0x22,0x7c,0x22,
- 0x06,0x22,0xbe,0x22 ,};
- uchar table5[]={
- 0xbe,0x06,0x7c,0x5e,
- 0xc6,0xda,0xfa,0x0e,
- 0xfe,0xde,};
- void wr_data(uchar da,uchar cnt)//写数据函数
- {
- uchar i;
- for(i=0;i<cnt;i++)
- {
- wr=0;
- delayus(10);
- dat=(bit)(da&0x80);/*if(da>=0x80)
- dat=1;
- else
- dat=0;*/
- delayus(10);
- wr=1;
- delayus(10);
- da<<=1;
- }
- }
- void wr_clearlcd()//清屏
- {
- uchar i;
- cs=0;
- delayus(10);
- wr_data(0xa0,3);
- wr_data(0x00<<2,6);
- for(i=0;i<10;i++)
- {
- wr_data(0x00,8);
- }
- cs=1;
- delayus(10);
- }
- void wr_com(uchar com)//写命令函数
- {
- cs=0;
- delayus(10);
- wr_data(0x80,4);
- wr_data(com,8);
- cs=1;
- delayus(10);
- }
- void wr_all_lcd(uchar add,uchar *p,uchar cnt)//写连续地址
- {
- uchar i;
- cs=0;
- delayus(10);
- wr_data(0xa0,3);
- wr_data(add<<2,6);
- for(i=0;i<cnt;i++)
- {
- wr_data(*p,8);
- p++;
- }
- cs=1;
- delayus(10);
- }
- void lcd_init()
- {
- cs=1;
- wr=1;
- dat=1;
- delayms(20);
- wr_com(BIAS);
- wr_com(RC256);
- wr_com(SYSDIS);
- wr_com(WDTDIS);
- wr_com(SYSEN);
- wr_com(LCDON);
- wr_clearlcd();
- }
- void wr_add_data(uchar add,uchar dat)
- {
- cs=0;
- delayus(10);
- wr_data(0xa0,3);
- wr_data(add<<2,6);
- wr_data(dat<<4,4);//数据位为4位
- cs=1;
- delayus(10);
- }
- void daoshu(uchar add,uchar *p,uchar cnt)
- {
- uchar i,a,b;
- cs=0;
- delayus(10);
- wr_data(0xa0,3);
- for(i=0;i<cnt;i++)
- {
- wr_data(add<<2,6);
- for(a=0;a<6;a++)
- wr_data(*p,8);
- p++;
- for(b=0;b<3;b++)
- wr_data(*p,8);
- p++;
- delayms(1000);
- wr_clearlcd();
- cs=0;
- delayus(10);
- wr_data(0xa0,3);
- }
- cs=1;
- delayus(10);
- wr_clearlcd();
- cs=0;
- delayus(10);
- wr_data(0xa0,3);
- wr_data(0x08<<2,6);
- for(i=0;i<2;i++)
- wr_data(0xbe,8);
- cs=1;
- delayus(10);
- wr_add_data(0x10,0x02);
- }
- void ceshi(uchar add)//一段一段点亮全屏测试
- {
- uchar i,num,*p=table3;
- for(num=0;num<17;num++)
- {
- for(i=0;i<4;i++)
- {
- cs=0;
- delayus(10);
- wr_data(0xa0,3);
- wr_data(add<<2,6);
- wr_data(*p<<4,4);
- p++;
- delayms(1000);
- cs=1;
- delayus(10);
- }
- p=table3;
- add++;
- if(ZO==0)
- ONOFF=1;
- if(add==17)
- {
- wr_all_lcd(0x00,table1,10);
- delayms(2000);
- }
- }
- }
复制代码
|