ch455g.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /*
  2. * File: CH455.c
  3. * Author: JiangXiaowei
  4. */
  5. #include "ch455g.h" // 修改该文件以适应硬件环境/单片机型号等
  6. #include "delay.h"
  7. #include "iic2.h"
  8. //#include "includes.h"
  9. //定义
  10. //#define CH455H_LED_NUM 16
  11. //uint32_t ch455h_Time_duty[CH455H_LED_NUM]; //占空比
  12. //uint8_t ch455h_Time_en[CH455H_LED_NUM]; //使能
  13. //uint8_t ch455h_Time_en_process; //全局使能
  14. void CH455_Init(void)
  15. {
  16. iic2_init();
  17. CH455_Write( CH455_7SEG_ON ); //八段式
  18. CH455_Write( CH455_SYSON_2 ); //2级亮度
  19. }
  20. void CH455_Write( UINT16 cmd ) //写命令
  21. {
  22. IIC2_Start();//启动总线
  23. IIC2_Send_Byte(((UINT8)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR);
  24. IIC2_NAck();
  25. IIC2_Send_Byte((UINT8)cmd);//发送数据
  26. IIC2_NAck();
  27. IIC2_Stop();//结束总线
  28. }
  29. UINT8 CH455_Read( void ) //读取按键
  30. {
  31. UINT8 keycode;
  32. IIC2_Start();//启动总线
  33. IIC2_Send_Byte(((UINT8)(CH455_GET_KEY>>7)&CH455_I2C_MASK)|0x01|CH455_I2C_ADDR);
  34. IIC2_NAck();
  35. keycode = IIC2_Read_Byte(0);//发送数据
  36. IIC2_Stop();//结束总线
  37. return keycode;
  38. }
  39. void CH455H_LED_test(void){
  40. static uint16_t led=0;
  41. CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
  42. CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F));
  43. CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F));
  44. CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F));
  45. led++;
  46. }
  47. /*-----------------------------------------------------------
  48. * 16 12 8 4
  49. * 15 11 7 3
  50. * 14 10 6 2
  51. * 13 9 5 1
  52. *------------------------------------------------------------*/
  53. void CH455H_LED_set(uint16_t led){
  54. led = (((led & 0xaaaa) >> 1) | ((led & 0x5555) << 1));
  55. led = (((led & 0xcccc) >> 2) | ((led & 0x3333) << 2));
  56. led = (((led & 0xf0f0) >> 4) | ((led & 0x0f0f) << 4));
  57. led = (((led & 0xff00) >> 8) | ((led & 0x00ff) << 8));
  58. //左边是高位,第二版
  59. CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
  60. CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F));
  61. CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F));
  62. CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F));
  63. //左边是高位,第一版
  64. // CH455_Write( CH455_DIG0 | ((led>>12) & 0x0F));
  65. // CH455_Write( CH455_DIG1 | ((led>>0) & 0x0F));
  66. // CH455_Write( CH455_DIG2 | ((led>>4) & 0x0F));
  67. // CH455_Write( CH455_DIG3 | ((led>>8) & 0x0F));
  68. }
  69. void CH455H_LED_test00(short led){
  70. led = (((led & 0xaaaa) >> 1) | ((led & 0x5555) << 1));
  71. led = (((led & 0xcccc) >> 2) | ((led & 0x3333) << 2));
  72. led = (((led & 0xf0f0) >> 4) | ((led & 0x0f0f) << 4));
  73. led = (((led & 0xff00) >> 8) | ((led & 0x00ff) << 8));
  74. //左边是高位
  75. CH455_Write( CH455_DIG0 | ((led>>12) & 0x0F));
  76. CH455_Write( CH455_DIG1 | ((led>>0) & 0x0F));
  77. CH455_Write( CH455_DIG2 | ((led>>4) & 0x0F));
  78. CH455_Write( CH455_DIG3 | ((led>>8) & 0x0F));
  79. //左边是低位
  80. // CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
  81. // CH455_Write( CH455_DIG1 | ((led>>12) & 0x0F));
  82. // CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F));
  83. // CH455_Write( CH455_DIG3 | ((led>>4) & 0x0F));
  84. }
  85. void CH455H_LED_test2(void){
  86. static uint16_t led=0;
  87. CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
  88. CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F));
  89. CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F));
  90. CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F));
  91. led=~led;
  92. }
  93. void CH455H_LED_test3(void){
  94. static uint16_t led=0;
  95. CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
  96. led++;
  97. led&=0x000F;
  98. }