用C语言编写TM1651驱动四位数码管的代码,代码包含以下内容 switch (dispDriver.byte) { case 0: case 3: case 10: IIC_Start(); break;
时间: 2024-02-14 14:07:31 浏览: 96
好的,以下是一个简单的用C语言编写的TM1651驱动四位数码管的代码示例,其中包含了switch语句和IIC通讯部分:
```c
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DIO = P1^0;
sbit CLK = P1^1;
uchar code TubeTab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void DelayMs(uint ms)
{
uint i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 110; j++);
}
void TM1651_Start()
{
DIO = 1;
_nop_();
CLK = 1;
_nop_();
DIO = 0;
}
void TM1651_Stop()
{
DIO = 0;
_nop_();
CLK = 1;
_nop_();
DIO = 1;
}
uchar TM1651_Read()
{
uchar i, dat = 0;
for (i = 0; i < 8; i++)
{
CLK = 0;
_nop_();
dat >>= 1;
if (DIO)
dat |= 0x80;
CLK = 1;
_nop_();
}
return dat;
}
void TM1651_Write(uchar dat)
{
uchar i;
for (i = 0; i < 8; i++)
{
CLK = 0;
_nop_();
DIO = (dat & 0x01);
dat >>= 1;
CLK = 1;
_nop_();
}
}
void TM1651_Disp(uchar *dispData)
{
uchar i;
TM1651_Start();
TM1651_Write(0x44);
TM1651_Stop();
TM1651_Start();
TM1651_Write(0xc0);
for (i = 0; i < 4; i++)
TM1651_Write(dispData[i]);
TM1651_Stop();
TM1651_Start();
TM1651_Write(0x88);
TM1651_Stop();
}
void main()
{
uchar i, j, dispBuf[4] = {0};
while (1)
{
switch (dispDriver.byte) //读取dispDriver的值并根据不同的值做出不同的操作
{
case 0:
case 3:
case 10:
TM1651_Disp(dispBuf);
break;
default:
break;
}
for (i = 0; i < 4; i++)
{
dispBuf[i] = TubeTab[j];
j++;
if (j > 9)
j = 0;
}
DelayMs(500);
}
}
```
在这个示例中,我们定义了一些常量和变量,包括管脚定义、数码管显示数据表、延时函数、TM1651通讯函数等。在主函数中,我们使用了一个switch语句来根据dispDriver的值来执行不同的操作,这里只是简单地调用了TM1651_Disp函数来显示dispBuf数组中的数据。这个程序没有实现外部中断或按键扫描等功能,只是简单地循环显示0~9的数字。你可以根据自己的实际情况进行修改和完善。
阅读全文