TM1640操作源码--LED驱动IC

  1. #define   ADDR_START1640        (0XC0+0x01)  
  2.   
  3. #define     DSP1640_DIS     0  
  4. #define     DSP1640_ENB     1  
  5.   
  6. /* 
  7. 控制显示 
  8. 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f 分别对应 
  9. 1/16,  2/16,  4/16,  10/16, 11/16, 12/16, 13/16, 14/16    
  10.  
  11. 设置数据,0x40,0x44分别对应地址自动加一和固定地址模式      
  12. */  
  13.   
  14. #define SET_DATA_ORDER     0X40  //数据命令设置 地址自动加1  
  15. #define SET_DISPLAY        0X8F  //显示命令控制  脉冲宽度14/16  
  16. #define SET_DSP1640_DIS      0x80  //显示关控制  
  17.   
  18.   
  19. #define     TM1640SLK_HING   P_TM1640SLK = 1  
  20. #define     TM1640SLK_LOW      P_TM1640SLK = 0  
  21.   
  22. #define     TM1640DAT_HING   P_TM1640DAT = 1  
  23. #define     TM1640DAT_LOW        P_TM1640DAT = 0  
  24.   
  25.   
  26. #define     VT_DLY1640              150//80//10//2000  
  27. #define     VT_DLYNOP               10//80//10  
  28.   
  29. //*************************************  
  30. // 函数名称:_Nopt  
  31. // 函数功能:延时函数  
  32. // 入口参数:延时时间  
  33. // 出口参数:无  
  34. //***************************************/  
  35. void Nop1640(uint16 T_Dly)  
  36. {     
  37.         while(T_Dly--);           
  38.         return ;  
  39. }  
  40. //****************************************  
  41. // 函数名称:TM1640Start  
  42. // 函数功能:TM1640起始信号  
  43. // 入口参数:无  
  44. // 出口参数:无  
  45. //***************************************/  
  46. void TM1640Start(void)  
  47. {   
  48.         TM1640DAT_HING;  
  49.         Nop1640(VT_DLYNOP) ;  
  50.         TM1640SLK_HING;  
  51.         Nop1640(VT_DLY1640) ;  
  52.         TM1640DAT_LOW;  
  53.         Nop1640(VT_DLY1640) ;  
  54.         TM1640SLK_LOW;  
  55.         Nop1640(VT_DLY1640) ;  
  56. }  
  57. //*************************************  
  58. // 函数名称:TM1640Stop  
  59. // 函数功能:TM1640结束信号  
  60. // 入口参数:无  
  61. // 出口参数:无  
  62. //***************************************/  
  63. void TM1640Stop(void)  
  64. {  
  65.         TM1640DAT_LOW;  
  66.         Nop1640(VT_DLYNOP) ;  
  67.         TM1640SLK_HING;  
  68.         Nop1640(VT_DLY1640) ;  
  69.         TM1640DAT_HING;  
  70.         Nop1640(VT_DLY1640) ;  
  71.         TM1640SLK_LOW;  
  72.         Nop1640(VT_DLY1640) ;  
  73.           
  74. }  
  75. //*************************************  
  76. // 函数名称:TM1640WriteByte  
  77. // 函数功能:TM1640写一字节数据  
  78. // 入口参数:要写的数据  
  79. // 出口参数:无  
  80. //***************************************/  
  81. void TM1640WriteByte(uint8 date)  
  82. {  
  83.         uint8 i;  
  84.         uint8 Tmp;  
  85.           
  86.         Tmp=date;  
  87.           
  88.         TM1640DAT_LOW;  
  89.         Nop1640(VT_DLYNOP) ;  
  90.         TM1640SLK_LOW;  
  91.           
  92.         for(i=0;i<8;i++)  
  93.         {  
  94.                 TM1640SLK_LOW;  
  95.                 Nop1640(VT_DLYNOP) ;  
  96.                 if(Tmp & 0x01)  
  97.                 {  
  98.                         TM1640DAT_HING;  
  99.                         Nop1640(VT_DLY1640) ;  
  100.                 }  
  101.                 else  
  102.                 {  
  103.                         TM1640DAT_LOW;  
  104.                         Nop1640(VT_DLY1640) ;  
  105.                 }  
  106.                 TM1640SLK_HING;  
  107.                 Tmp = Tmp>>1;  
  108.         }  
  109.           
  110.         TM1640SLK_LOW;  
  111.         Nop1640(VT_DLYNOP) ;  
  112.         TM1640DAT_LOW;  
  113. }  
  114. //*************************************  
  115. // 函数名称:TM1640_Init  
  116. // 函数功能:TM1640设备初始化  
  117. // 入口参数:0 1 代表 显示关 显示开  
  118. // 出口参数:无  
  119. //***************************************/  
  120. void TM1640_Init(uint8 InValue)    
  121. {  
  122.         TM1640DAT_HING;  
  123.         Nop1640(VT_DLYNOP) ;                 
  124.         TM1640SLK_HING;  
  125.           
  126.         if(InValue == DSP1640_DIS) //显示关  
  127.         {  
  128.                 TM1640Start();//数据写模式设置  
  129.                 TM1640WriteByte(SET_DSP1640_DIS);//  
  130.                 TM1640Stop();         
  131.         }  
  132.         else  
  133.         {  
  134.                 TM1640Start();//数据写模式设置  
  135.                 TM1640WriteByte(SET_DATA_ORDER);//  
  136.                 TM1640Stop();  
  137.                   
  138.                 TM1640Start(); //显示亮度设置  
  139.                 TM1640WriteByte(SET_DISPLAY); //0x80关显示            
  140.                 TM1640Stop();  
  141.         }  
  142. }  
  143. //*************************************  
  144. // 函数名称:TM1640_SendData  
  145. // 函数功能:发送显示缓存  
  146. // 入口参数:1640要写数据的起始地址  
  147. //           显示数据缓存的起始地址 数据长度  
  148. // 出口参数:无  
  149. //***************************************/  
  150. void TM1640_SendData(uint8 Addr1640,uint8 *a,uint8 DataLong)  
  151. {  
  152.         uint8 i;    
  153.           
  154.         TM1640Start();  
  155.         TM1640WriteByte(Addr1640); //设置起始地址  
  156.           
  157.         for(i=0;i<DataLong;i++)  
  158.         {  
  159.                 TM1640WriteByte(a[i]);   
  160.         }  
  161.           
  162.         TM1640Stop();   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值