1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > TM1637数码管显示STC51单片机驱动程序

TM1637数码管显示STC51单片机驱动程序

时间:2022-09-01 05:52:35

相关推荐

TM1637数码管显示STC51单片机驱动程序

/*Coder : FarmanDate : -01-02参考了厂家的TM1637数据手册,在此表示感谢。*/#include <STC89C5XRC.h> //包含52单片机头文件#include "Delay.h"sbit I2C_SCL = P2^1; //定义模拟IIC总线的时钟线sbit I2C_SDA = P2^0; //定义模拟IIC总线的数据线#define TM1637_BRIGHTNESS 7 // 0 - 7void I2C_delay(){nop_();}void I2C_start(){ I2C_SCL = 1; I2C_SDA = 1;I2C_delay();I2C_SDA = 0; // 时钟线设置为常态,低电平。}/*I2C 总线写1个字节不包含应答位的检测*/void I2C_write_byte(char byte_to_write){unsigned char i;for(i=0; i<8; i++){I2C_SCL = 0;I2C_SDA = byte_to_write & 0x01;I2C_delay();I2C_SCL = 1;I2C_delay();I2C_SCL = 0;I2C_delay();byte_to_write >>= 1;}return; }void I2C_check_ack(){// I2C 检查应答位,实际未检查,只发送了应答位时钟,认为TM1637工作正常I2C_SCL = 0;I2C_delay();//在第八个时钟下降沿之后延时5us,开始判断ACK 信号while(I2C_SDA){;}I2C_SCL = 1;I2C_delay();I2C_SCL=0;}void I2C_send_ack(){I2C_SDA = 0;I2C_delay();I2C_SCL = 1;I2C_delay();I2C_SCL = 0;I2C_delay();I2C_SDA = 1;I2C_delay();}void I2C_stop(){I2C_SCL = 0;I2C_delay();I2C_SDA = 0;I2C_delay();I2C_SCL = 1;I2C_delay();I2C_SDA = 1;}/////// TM1637模块操作函数////void TM1637_write_command_byte(unsigned char command){I2C_start();I2C_write_byte(command);I2C_check_ack();I2C_stop();}// bright : 0 - 7void TM1637_display_switch_and_bright(bit enable_display, unsigned char bright){TM1637_write_command_byte(0x80 + (enable_display ? 0x08 : 0x00) + bright);}void TM1637_write_display_bytes(unsigned char first_addr,unsigned char bytes_to_write[],unsigned char num_of_bytes){unsigned char i;I2C_start();I2C_write_byte(0x40);I2C_check_ack();I2C_stop();I2C_start();I2C_write_byte(0xC0 + first_addr);I2C_check_ack();for(i=0; i<num_of_bytes; i++){I2C_write_byte(bytes_to_write[i]);I2C_check_ack();} I2C_stop();}// addr: 0 - 5void TM1637_write_display_byte(unsigned char addr, unsigned char segments){I2C_start();I2C_write_byte(0x40 + addr);I2C_check_ack();I2C_stop();I2C_start();I2C_write_byte(0xC0 + addr);I2C_check_ack();I2C_write_byte(segments);I2C_check_ack();I2C_stop();}code unsigned char TM1637_SEG_TAB[] ={0x3F // 00111111 0,0x06 // 00000110 1,0x5B // 01011011 2,0x4F // 01001111 3,0x66 // 01100110 4,0x6d // 01101101 5,0x7d // 01111101 6,0x07 // 00000111 7,0x7F // 01111111 8,0x6F // 01101111 9,0x77 // 01110111 A,0x7C // 01111100 b,0x39 // 00111001 C,0x5E // 01011110 d,0x79 // 01111001 E ,0x71 // 01110001 F};void TM1637_show_digit(unsigned char pos, unsigned char digit, bit with_dot){TM1637_write_display_byte(pos, TM1637_SEG_TAB[digit] | (with_dot ? 0x20 : 0x00));}void TM1637_init(){unsigned char i;TM1637_display_switch_and_bright(1, TM1637_BRIGHTNESS);for(i=0; i<6; i++){TM1637_write_display_byte(i, 0xFF);}Delay200ms();for(i=0; i<6; i++){TM1637_write_display_byte(i, 0x00);}Delay200ms();for(i=0; i<6; i++){TM1637_write_display_byte(i, 0xFF);}Delay200ms();for(i=0; i<6; i++){TM1637_write_display_byte(i, 0x00);}Delay200ms(); }void TM1637(){unsigned char seg;unsigned char i, j;TM1637_init();while(1){for(i=0; i<16; i++){for(j=0; j<6; j++){TM1637_show_digit(j, i, 0);}Delay1s();}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。