找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1111|回复: 0
打印 上一主题 下一主题
收起左侧

HT66F3185单片机TM1621显示控制程序

[复制链接]
跳转到指定楼层
楼主
ID:1070907 发表于 2023-7-29 17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,1621显示控制数字
2,通过HT66F3185,直接驱动显示屏。

  1. #include "Smg.h"

  2. //--------声音------光标-----
  3. uchar Sound_Flag,Cursor_Flag,Manual_falg;

  4. /********************从高位写入数据*************************/
  5. void Write_Data_H(uchar Data, uchar Cnt)           //Data的高cnt位写入TM1621,高位在前
  6. {
  7.         uchar i;
  8.         for(i=0;i<Cnt;i++)
  9.         {
  10.                 WRITE=0;
  11.                 if(Data&0x80) DATA=1;               
  12.                 else DATA=0;
  13.                 WRITE=1;
  14.                 Data<<=1;
  15.         }
  16.         WRITE=1;
  17.         DATA=1;
  18. }
  19. /********************从低位写入数据*************************/
  20. void Write_Data_L(uchar Data,uchar Cnt)        //Data 的低cnt位写入TM1621,低位在前
  21. {
  22.         unsigned char i;
  23.         for(i=0;i<Cnt;i++)
  24.         {
  25.                    WRITE=0;
  26.                   if(Data&0x01) DATA=1;  
  27.                    else DATA=0;
  28.                 WRITE=1;
  29.                 Data>>=1;
  30.         }
  31.         WRITE=1;
  32.         DATA=1;
  33. }

  34. /********************写入控制命令*************************/
  35. void WriteCmd(uchar Cmd)
  36. {
  37.         CS=0;
  38.         Write_Data_H(0x80,4);     //写入命令标志100
  39.         Write_Data_H(Cmd,8);      //写入命令数据
  40.         CS=1;
  41. }

  42. void WriteOneData(uchar Addr, uchar Data)
  43. {
  44.         CS=0;
  45.         Write_Data_H(0xa0,3);     
  46.         Write_Data_H(Addr<<2,6);
  47.         Write_Data_L(Data,4);     
  48.         CS=1;
  49. }


  50. /*******************TM1621初始化**********************/
  51. void Init_Tm1621()
  52. {
  53.         //uchar i;
  54.         
  55.         CS_T = 0;        
  56.         WRITE_T         = 0;        
  57.         DATA_T = 0;        
  58.         
  59.         CS=1;
  60.         WRITE=1;
  61.         DATA=1;        
  62.         
  63.         WriteCmd(BIAS);                 //1/3偏压 4公共口
  64.         WriteCmd(RC);                         //内部RC振荡
  65.         WriteCmd(SYSDIS);                 //关系统振荡器和LCD偏压发生器
  66.         WriteCmd(WDTDIS);                 //禁止看门狗
  67.         WriteCmd(SYSEN);                 //打开系统振荡器
  68.         WriteCmd(LCDON);                 //开LCD偏压
  69.         
  70.         Sound_Flag=1;
  71.         Manual_falg=0;
  72. }


  73. const uchar Smg_Buf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0,0x40,0x38};

  74. //----------------------------0----1----2----3----4----5----6----7----8----9---灭-
  75. const uchar Smg_Buf_Front[]={0x0f,0x06,0x0b,0x0f,0x06,0x0d,0x0d,0x07,0x0f,0x0f,0,0x40,0x38};
  76. const uchar Smg_Buf_After[]={0x0a,0x00,0x0c,0x04,0x06,0x06,0x0e,0x00,0x0e,0x06,0,0x40,0x38};

  77. //-----------------------------0----1----2----3----4----5----6----7----8----9---灭-
  78. const uchar Smg_Buf_Front1[]={0x0a,0x00,0x06,0x04,0x0c,0x0c,0x0f,0x00,0x0f,0x0c,0,0x04,0x38};
  79. const uchar Smg_Buf_After1[]={0x0f,0x06,0x0d,0x0f,0x06,0x0b,0x0b,0x0e,0x0f,0x0f,0,0x00,0x38};


  80. void Disp_Data(uint TEMP,uint TEMP_S,uint TEMP_T,uchar L_M_S_B,uchar MODE)
  81. {
  82.         uchar i;
  83.         if(MODE==0)
  84.         {               
  85.                 for(i=0;i<32;i++)
  86.                 {
  87.                         WriteOneData(i,0);
  88.                 }
  89.                
  90.         }
  91.         else if(MODE==1)
  92.         {
  93.                 for(i=0;i<32;i++)
  94.                 {
  95.                         WriteOneData(i,0xff);
  96.                 }
  97.         }
  98.         else if(MODE == 2)
  99.         {
  100.         
  101.                 Show_Top(L_M_S_B);
  102.                 Show_num(TEMP);
  103.                 Show_num2(TEMP_S);
  104.                 Show_num3(TEMP_T);
  105.                
  106.                 Cursor_Flag=1;
  107.         }else if(MODE == 3)
  108.         {
  109.                 Show_Top(L_M_S_B);
  110.                 //Sound_Flag=1;
  111.                 Cursor_Flag=1;
  112.                
  113.                 Show_num(TEMP);
  114.                 Show_num2(TEMP_S);
  115.                 Show_num3(TEMP_T);
  116.                
  117.         }else
  118.         {
  119.                 Show_Top(L_M_S_B);
  120.                 //Sound_Flag=1;
  121.                 Cursor_Flag=1;
  122.                
  123.                 Show_num(TEMP);
  124.                 Show_num2(TEMP_S);
  125.                 Show_num3(TEMP_T);
  126.         }
  127. }

  128. void Show_num(uint TEMP)
  129. {
  130.         uchar ge,sh,ba,tem;
  131.         
  132.         if(TEMP == 10001)
  133.         {
  134.                 WriteOneData(7,Smg_Buf_Front[0]);
  135.                
  136.                 if(Sound_Flag == 1)
  137.                 {
  138.                         tem=Smg_Buf_After[0];
  139.                         tem |= 0x01;
  140.                         WriteOneData(8,tem);        
  141.                 }else
  142.                 {
  143.                         WriteOneData(8,Smg_Buf_After[0]);         
  144.                 }
  145.                 //WriteOneData(8,Smg_Buf_After[0]);
  146.                
  147.                 WriteOneData(9,Smg_Buf_Front[0]);
  148.                 WriteOneData(10,Smg_Buf_After[0]);
  149.                
  150.                 WriteOneData(11,Smg_Buf_Front[0]);
  151.                 WriteOneData(12,Smg_Buf_After[0]+0x01);
  152.                
  153.                 WriteOneData(13,Smg_Buf_Front[0]);
  154.                 WriteOneData(14,Smg_Buf_After[0]+0x01);
  155.                
  156.         }else
  157.         {
  158.                 ge = TEMP%10;        
  159.                 sh = TEMP%100/10;        
  160.                 ba = TEMP%1000/100;
  161.                
  162.                 //ge
  163.                 WriteOneData(7,Smg_Buf_Front[ge]);
  164.                
  165.                 if(Sound_Flag == 1)
  166.                 {
  167.                         tem=Smg_Buf_After[ge];
  168.                         tem |= 0x01;
  169.                         WriteOneData(8,tem);        
  170.                 }else
  171.                 {
  172.                         WriteOneData(8,Smg_Buf_After[ge]);         
  173.                 }
  174.                
  175.                
  176.                 //sh
  177.                 if(ba == 0)
  178.                 {
  179.                         if(sh == 0)
  180.                         {
  181.                                 WriteOneData(9,0x00);
  182.                                 WriteOneData(10,0x00);        
  183.                         }else
  184.                         {
  185.                                 WriteOneData(9,Smg_Buf_Front[sh]);
  186.                                 WriteOneData(10,Smg_Buf_After[sh]);
  187.                         }               
  188.                 }else
  189.                 {
  190.                         WriteOneData(9,Smg_Buf_Front[sh]);
  191.                         WriteOneData(10,Smg_Buf_After[sh]);
  192.                 }
  193.                
  194.                
  195.                 //ba
  196.                
  197.                 if(ba == 0)
  198.                 {
  199.                         WriteOneData(11,0x00);
  200.                         WriteOneData(12,0x00);
  201.                 }else
  202.                 {
  203.                         WriteOneData(11,Smg_Buf_Front[ba]);
  204.                         WriteOneData(12,Smg_Buf_After[ba]);         
  205.                 }
  206.                
  207.                 //去掉千位
  208.                 WriteOneData(13,0x00);
  209.                 WriteOneData(14,0x01);        
  210.                
  211.                 }
  212. }

  213. void Show_num2(uint TEMP)
  214. {
  215.         uchar ge,sh,ba;
  216.         
  217.         if(TEMP == 10000)
  218.         {
  219.                 WriteOneData(21,Smg_Buf_Front1[11]);
  220.                 WriteOneData(22,Smg_Buf_After1[11]);
  221.                
  222.                 WriteOneData(19,Smg_Buf_Front1[11]);
  223.                 WriteOneData(20,Smg_Buf_After1[11]);
  224.                
  225.                 WriteOneData(17,Smg_Buf_Front1[11]);
  226.                 WriteOneData(18,Smg_Buf_After1[11]);
  227.                
  228.                 WriteOneData(15,Smg_Buf_Front1[11]+0x01);
  229.                 WriteOneData(16,Smg_Buf_After1[11]);
  230.                
  231.         }else if(TEMP == 10001)
  232.         {
  233.                 WriteOneData(21,Smg_Buf_Front1[0]);
  234.                 WriteOneData(22,Smg_Buf_After1[0]);
  235.                
  236.                 WriteOneData(19,Smg_Buf_Front1[0]);
  237.                 WriteOneData(20,Smg_Buf_After1[0]);
  238.                
  239.                 WriteOneData(17,Smg_Buf_Front1[0]+0x01);
  240.                 WriteOneData(18,Smg_Buf_After1[0]);
  241.                
  242.                 WriteOneData(15,Smg_Buf_Front1[0]+0x01);
  243.                 WriteOneData(16,Smg_Buf_After1[0]);
  244.         
  245.         }else
  246.         {
  247.                 ge = TEMP%10;        
  248.                 sh = TEMP%100/10;        
  249.                 ba = TEMP%1000/100;
  250.                
  251.                 //ge
  252.                 WriteOneData(21,Smg_Buf_Front1[ge]);
  253.                 WriteOneData(22,Smg_Buf_After1[ge]);
  254.                
  255.                 //sh
  256.                 WriteOneData(19,Smg_Buf_Front1[sh]);
  257.                 WriteOneData(20,Smg_Buf_After1[sh]);
  258.                
  259.                 //ba
  260.                 WriteOneData(17,Smg_Buf_Front1[ba]);
  261.                 WriteOneData(18,Smg_Buf_After1[ba]);
  262.                
  263.                 //去掉千位
  264.                 WriteOneData(15,0x01);
  265.                 WriteOneData(16,0x00);        
  266.         }
  267. }

  268. void Show_num3(uint TEMP)
  269. {
  270.         uchar ge,sh,ba;
  271.         
  272.         if(TEMP == 10000)
  273.         {
  274.                 WriteOneData(23,Smg_Buf_Front[0]);
  275.                 WriteOneData(24,Smg_Buf_After[0]+0x01);
  276.                
  277.                 WriteOneData(25,Smg_Buf_Front[10]);
  278.                 WriteOneData(26,Smg_Buf_After[10]+0x01);
  279.                         
  280.                 WriteOneData(27,Smg_Buf_Front[10]);
  281.                 WriteOneData(28,Smg_Buf_After[10]);
  282.                
  283.                 WriteOneData(29,Smg_Buf_Front[10]);
  284.                 WriteOneData(30,Smg_Buf_After[10]+0x01);
  285.                
  286.         }else if(TEMP == 10001)
  287.         {
  288.                 WriteOneData(23,Smg_Buf_Front[0]);
  289.                 WriteOneData(24,Smg_Buf_After[0]+0x01);
  290.                
  291.                 WriteOneData(25,Smg_Buf_Front[0]);
  292.                 WriteOneData(26,Smg_Buf_After[0]+0x01);
  293.                         
  294.                 WriteOneData(27,Smg_Buf_Front[0]);
  295.                 WriteOneData(28,Smg_Buf_After[0]+0x01);
  296.                
  297.                 WriteOneData(29,Smg_Buf_Front[0]);
  298.                 WriteOneData(30,Smg_Buf_After[0]+0x01);        
  299.         }else
  300.         {
  301.                 ge = TEMP%10;        
  302.                 sh = TEMP%100/10;        
  303.                 ba = TEMP%1000/100;
  304.                
  305.                 WriteOneData(23,Smg_Buf_Front1[ge]);
  306.                 WriteOneData(24,Smg_Buf_After1[ge]);
  307.                
  308.                 WriteOneData(25,Smg_Buf_Front1[sh]);
  309.                 WriteOneData(26,Smg_Buf_After1[sh]);
  310.                         
  311.                 WriteOneData(27,Smg_Buf_Front1[ba]);
  312.                 WriteOneData(28,Smg_Buf_After1[ba]);
  313.         }
  314.                
  315. }

  316. void Show_Top(uchar L_M_S_B)
  317. {
  318.         if(Manual_falg ==1)
  319.         {
  320.                 WriteOneData(6,0x01);               
  321.         }else
  322.         {
  323.                 WriteOneData(6,L_M_S_B);
  324.         }
  325.         
  326.         
  327.         if(Cursor_Flag == 1)
  328.         {
  329.                 WriteOneData(31,0x01);        
  330.         }else if(Cursor_Flag == 2)
  331.         {
  332.                 WriteOneData(31,0x02);
  333.         }else if(Cursor_Flag == 3)
  334.         {
  335.                 WriteOneData(31,0x04);
  336.         }else
  337.         {
  338.                 WriteOneData(31,0x08);
  339.         }                        
  340. }
复制代码
原理图:无
仿真:无
Smg.c和Smg.h 2个文件下载: smg.zip (4.05 KB, 下载次数: 11)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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