找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10791|回复: 14
收起左侧

HT1621B的单片机驱动程序

  [复制链接]
ID:232431 发表于 2017-9-13 11:41 | 显示全部楼层 |阅读模式
自己编写的HT1621B测试程序,参考了其他人的部分代码,包括基本的初始化设置,写数据,写命令,清屏,一笔一笔点亮LCD到全显等,程序后面有注释,位声明自己定义个人根据自己的硬件电路自己连接

单片机源程序如下:
  1. #define SYSEN 0x02//打开系统振荡器
  2. #define LCDON 0x06//打开LCD偏压发生器
  3. #define RC256 0x30//片内RC振荡器
  4. #define BIAS 0x52//LCD 1/3偏压 4个公共端口
  5. #define SYSDIS 0x00
  6. #define WDTDIS 0x0a
  7. sbit cs=P1^7;
  8. sbit rd=P3^2;
  9. sbit wr=P3^3;
  10. sbit dat=P3^4;
  11. uchar table[]={
  12. 0x0f,0x0f,0x0f,0x0f,
  13. 0x0f,0x0f,0x0f,0x0f,
  14. 0x0f,0x0f,0x0f,0x0f,
  15. 0x0f,0x0f,0x0f,0x0f,0x0f,};
  16. uchar table1[]={
  17. 0xff,0xff,0xff,0xff,
  18. 0xff,0xff,0xff,0xff,0xf0,};
  19. uchar table2[]={
  20. 0xe6,0xf8,0xb0,0xb0,0xbe,};
  21. uchar table3[]={
  22. 0x01,0x03,0x07,0x0f,};
  23. uchar table4[]={
  24. 0xde,0x22,0xfe,0x22,
  25. 0x0e,0x22,0xfa,0x22,
  26. 0xda,0x22,0xc6,0x22,
  27. 0x5e,0x22,0x7c,0x22,
  28. 0x06,0x22,0xbe,0x22 ,};
  29. uchar table5[]={
  30. 0xbe,0x06,0x7c,0x5e,
  31. 0xc6,0xda,0xfa,0x0e,
  32. 0xfe,0xde,};
  33. void wr_data(uchar da,uchar cnt)//写数据函数
  34. {
  35.     uchar i;
  36.     for(i=0;i<cnt;i++)
  37.     {
  38.         wr=0;
  39.         delayus(10);
  40.         dat=(bit)(da&0x80);/*if(da>=0x80)
  41.             dat=1;
  42.         else
  43.             dat=0;*/
  44.         delayus(10);
  45.         wr=1;
  46.         delayus(10);
  47.         da<<=1;
  48.     }
  49. }
  50. void wr_clearlcd()//清屏
  51. {
  52.     uchar i;
  53.     cs=0;
  54.     delayus(10);
  55.     wr_data(0xa0,3);
  56.     wr_data(0x00<<2,6);
  57.     for(i=0;i<10;i++)
  58.     {
  59.         wr_data(0x00,8);
  60.     }
  61.     cs=1;
  62.     delayus(10);
  63. }
  64. void wr_com(uchar com)//写命令函数
  65. {
  66.     cs=0;
  67.     delayus(10);
  68.     wr_data(0x80,4);
  69.     wr_data(com,8);
  70.     cs=1;
  71.     delayus(10);
  72. }
  73. void wr_all_lcd(uchar add,uchar *p,uchar cnt)//写连续地址
  74. {
  75.     uchar i;
  76.     cs=0;
  77.     delayus(10);
  78.     wr_data(0xa0,3);
  79.     wr_data(add<<2,6);
  80.     for(i=0;i<cnt;i++)
  81.     {
  82.         wr_data(*p,8);
  83.         p++;
  84.     }
  85.     cs=1;
  86.     delayus(10);
  87. }
  88. void lcd_init()
  89. {
  90.     cs=1;
  91.     wr=1;
  92.     dat=1;
  93.     delayms(20);
  94.     wr_com(BIAS);
  95.     wr_com(RC256);
  96.     wr_com(SYSDIS);
  97.     wr_com(WDTDIS);
  98.     wr_com(SYSEN);
  99.     wr_com(LCDON);
  100.     wr_clearlcd();
  101. }
  102. void wr_add_data(uchar add,uchar dat)
  103. {
  104.     cs=0;
  105.     delayus(10);
  106.     wr_data(0xa0,3);
  107.     wr_data(add<<2,6);
  108.     wr_data(dat<<4,4);//数据位为4位
  109.     cs=1;
  110.     delayus(10);
  111. }

  112. void daoshu(uchar add,uchar *p,uchar cnt)
  113. {
  114.     uchar i,a,b;
  115.     cs=0;
  116.     delayus(10);
  117.     wr_data(0xa0,3);
  118.     for(i=0;i<cnt;i++)
  119.     {
  120.         wr_data(add<<2,6);
  121.         for(a=0;a<6;a++)
  122.             wr_data(*p,8);
  123.         p++;
  124.         for(b=0;b<3;b++)
  125.             wr_data(*p,8);
  126.         p++;
  127.         delayms(1000);
  128.         wr_clearlcd();
  129.         cs=0;
  130.         delayus(10);
  131.         wr_data(0xa0,3);
  132.     }
  133.     cs=1;
  134.     delayus(10);
  135.     wr_clearlcd();
  136.     cs=0;
  137.     delayus(10);
  138.     wr_data(0xa0,3);
  139.     wr_data(0x08<<2,6);
  140.     for(i=0;i<2;i++)
  141.         wr_data(0xbe,8);
  142.     cs=1;
  143.     delayus(10);
  144.     wr_add_data(0x10,0x02);   
  145. }
  146. void ceshi(uchar add)//一段一段点亮全屏测试
  147. {
  148.     uchar i,num,*p=table3;
  149.     for(num=0;num<17;num++)
  150.     {
  151.         for(i=0;i<4;i++)
  152.         {
  153.             cs=0;
  154.             delayus(10);
  155.             wr_data(0xa0,3);
  156.             wr_data(add<<2,6);
  157.             wr_data(*p<<4,4);
  158.             p++;
  159.             delayms(1000);
  160.             cs=1;
  161.             delayus(10);
  162.         }
  163.         p=table3;
  164.         add++;
  165.         if(ZO==0)
  166.             ONOFF=1;
  167.         if(add==17)
  168.         {
  169.             wr_all_lcd(0x00,table1,10);
  170.             delayms(2000);
  171.         }
  172.     }
  173. }

复制代码

ht1621B.docx

12.37 KB, 下载次数: 343

回复

使用道具 举报

ID:74784 发表于 2017-9-13 19:51 | 显示全部楼层
硬件电路是咋连接的?
回复

使用道具 举报

ID:232431 发表于 2017-9-15 15:24 | 显示全部楼层
lxa0 发表于 2017-9-13 19:51
硬件电路是咋连接的?

程序里面不是有4个引脚的未定义吗,只将那4个脚与单片机的I/O口连接就行,具体自己连接。HT1621B的其余引脚你可以下载它 的datasheet参考就行了
回复

使用道具 举报

ID:290257 发表于 2018-3-11 01:19 | 显示全部楼层
我可以下載嗎?
回复

使用道具 举报

ID:336540 发表于 2018-7-30 14:32 | 显示全部楼层
完美兼容HT1621B 全部封装 SSOP48 DIP28 LQFP44 LQFP48
详见http://www.51hei.com/bbs/dpj-125017-1.html
回复

使用道具 举报

ID:371023 发表于 2018-8-17 15:21 | 显示全部楼层
                            硬件电路是咋连接的?
回复

使用道具 举报

ID:371023 发表于 2018-8-17 15:22 | 显示全部楼层
硬件电路是咋连接的? 硬件电路是咋连接的?
回复

使用道具 举报

ID:277978 发表于 2018-9-10 14:23 | 显示全部楼层
下不了

回复

使用道具 举报

ID:397024 发表于 2018-9-12 16:38 | 显示全部楼层
硬件电路是咋连接的?
回复

使用道具 举报

ID:58340 发表于 2019-12-7 21:12 | 显示全部楼层
硬件电路是咋连接的?
回复

使用道具 举报

ID:677678 发表于 2021-6-30 23:22 | 显示全部楼层
sbit rd     不是三个腿吗,啊   这个是啥
回复

使用道具 举报

ID:508160 发表于 2021-8-13 10:30 | 显示全部楼层
里面主函数都没有吗
回复

使用道具 举报

ID:686858 发表于 2021-8-29 09:49 | 显示全部楼层
if(ZO==0)
ONOFF=1;
这两个是什么不完整的程序上传上来
回复

使用道具 举报

ID:398189 发表于 2023-2-8 15:02 | 显示全部楼层
错的,数据地位在前,命令高位在前都不区分
回复

使用道具 举报

ID:624729 发表于 2023-4-18 14:34 | 显示全部楼层
尝试烧录,没有显示,不知道为什么.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表