给你一个C文件,适合STC15W408AS
- #include <STC15F2K60S2.H>
- #define uchar unsigned char
- #define uint unsigned int
- /*----------------------------
- TM1640操作相关的宏定义
- ----------------------------*/
- #define TM1640_SCK_HIGH SCK_Pin=1
- #define TM1640_SCK_LOW SCK_Pin=0
- #define TM1640_DOUT_HIGH DOUT_Pin=1
- #define TM1640_DOUT_LOW DOUT_Pin=0
- void TM1640_Init();//初始化TM1640
- void TM1640_Start();//开始
- void TM1640_Stop();//停止
- void TM1640_Write_Byte(uchar date);//写字节
- void TM1640_Write_Com(uchar date);//发送命令字
- void TM1640_Write_DATA();//指定地址连续写入数据
- void TM1640_Cls();//清0数码管
- sbit SCK_Pin = P3^3;
- sbit DOUT_Pin= P3^2;
- //顺序共阴极数码管段码表,段码a-h顺序接PX0-PX7
- uchar code table[18]={//共阴数码管段码"0~f-."
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x40,0x80};
- void TM1640_Start()//开始
- {
- TM1640_SCK_HIGH;
- TM1640_DOUT_HIGH;
- TM1640_DOUT_LOW;
- TM1640_SCK_LOW;
- }
- void TM1640_Stop()//停止
- {
- TM1640_DOUT_LOW;
- TM1640_SCK_HIGH;
- TM1640_DOUT_HIGH;
- }
- void TM1640_Write_Byte(uchar date)//写字节
- {
- uchar i;
- TM1640_SCK_LOW;
- TM1640_DOUT_LOW;
- for(i=0;i<8;i++)
- {
- TM1640_SCK_LOW;
- if(date&0x01)
- TM1640_DOUT_HIGH;
- else
- TM1640_DOUT_LOW;
- TM1640_SCK_HIGH;
- date>>=1;
- }
- TM1640_SCK_LOW;
- TM1640_DOUT_LOW;
- }
- void TM1640_Write_Com(uchar date)//发送命令字
- {
- TM1640_Start();
- TM1640_Write_Byte(date);
- TM1640_Stop();
- }
- void TM1640_Write_DATA() //指定地址连续写入数据
- {
- uchar i;
- TM1640_Write_Com(0x40); //44固定地址 40连续地址
- TM1640_Start();
- TM1640_Write_Byte(0xc0);//从第一个地址开始
- // for(i=0;i<8;i++) //连续写8字节数据
- for(i=0;i<16;i++)
- TM1640_Write_Byte(dis_buf[i]);//连续写最多16字节数据
- TM1640_Stop();
- }
- void TM1640_Cls()//清屏函数
- {
- uchar i;
- TM1640_Write_Com(0x40);//地址自动加1模式
- TM1640_Start();
- TM1640_Write_Byte(0xc0);
- for(i=0;i<16;i++)
- TM1640_Write_Byte(0x00);//全部清空
- TM1640_Stop();
- }
- void TM1640_Init()
- {
- TM1640_Cls();
- TM1640_Write_Com(0x8c);//亮度0x88~0x8F
- }
复制代码 |