1)初始化: 1.开发板上电后,关闭蜂鸣器,继电器等无关外设; 2.酷炫复杂的开机方式:数码管上居中显示“PoT.”,并保持 1.5 秒。LED 灯 1 2 7 8 按顺序间隔 1s 闪烁,4s 后 3 4 5 6 灯以 1s 间隔闪烁,2 秒后全亮。
接线需要注意一下,代码如下:
#include <reg52.h> // 引入单片机头文件
sbit LED1 = P2^0; // 定义 LED 引脚
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
sbit BUZZER = P3^7; // 定义蜂鸣器引脚
sbit RELAY = P3^6; // 定义继电器引脚
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i = t; i > 0; i--)
for(j = 110; j > 0; j--);
}
void init() // 初始化函数
{
BUZZER = 1; // 关闭蜂鸣器
RELAY = 0; // 关闭继电器
}
void startup() // 开机函数
{
unsigned char i;
for(i = 0; i < 15; i++) // 数码管上显示 "PoT."
{
P1 = 0x3F; // P1 对应数码管的引脚,0x3F 对应 "PoT."
delay(100);
P1 = 0x00;
delay(100);
}
for(i = 0; i < 4; i++) // LED 灯 1 2 7 8 按顺序间隔 1s 闪烁
{
LED1 = 1;
LED2 = 1;
LED7 = 1;
LED8 = 1;
delay(1000);
LED1 = 0;
LED2 = 0;
LED7 = 0;
LED8 = 0;
delay(1000);
}
for(i = 0; i < 4; i++) // LED 灯 3 4 5 6 按顺序间隔 1s 闪烁
{
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
delay(1000);
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
delay(1000);
}
LED1 = 1; // 全部 LED 灯亮
LED2 = 1;
LED3 = 1;
LED4 = 1;
LED5 = 1;
LED6 = 1;
LED7 = 1;
LED8 = 1;
delay(2000);
}
void main()
{
init(); // 初始化
startup(); // 开机
while(1); // 无限循环
}
#include <reg51.h>
// 定义延时函数
void delay(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 120; j++) {
// 这里的延时值需要根据实际情况进行调整
}
}
}
// 数码管显示函数
void displayDigit(unsigned char digit) {
// 这里编写数码管显示的代码
// 根据单片机的引脚连接情况,控制数码管显示特定的数字
}
void main() {
unsigned int i;
// 关闭蜂鸣器和继电器等外设
// 这里根据实际的硬件连接情况,使用相应的引脚控制外设的开关状态
// 初始化数码管显示
displayDigit(0); // 将数码管显示为0
// 酷炫的开机方式
for (i = 0; i < 4; i++) {
P1 = 0x0F; // 控制LED灯1、2、7、8亮起
delay(1000); // 延时1秒
P1 = 0xF0; // 控制LED灯1、2、7、8熄灭,LED灯3、4、5、6亮起
delay(1000); // 延时1秒
}
// 数码管显示"PoT."
displayDigit(1); // 显示字母P
delay(500); // 延时0.5秒
displayDigit(15); // 显示字母o
delay(500); // 延时0.5秒
displayDigit(10); // 显示字母T
delay(500); // 延时0.5秒
displayDigit(11); // 显示句号
delay(500); // 延时0.5秒
// 延时1.5秒
delay(1500);
// 控制LED灯全部亮起
P1 = 0xFF;
while (1) {
// 循环执行其他操作
}
}
引脚位置
你这是仿真还是实物
基于new bing部分指引作答:
要实现这些功能,你可以使用CT107D单片机的GPIO口来控制LED灯和数码管,并通过编程控制它们的状态和显示。
首先,你需要了解CT107D单片机的引脚分配和功能,以确定要使用的GPIO口。然后,编写适当的代码来初始化单片机和外设。
以下是一个示例代码,实现了你提到的要求:
#include <reg52.h> // 引入CT107D单片机的寄存器定义
// 定义LED灯和数码管的引脚连接
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
sbit DIG1 = P1^0;
sbit DIG2 = P1^1;
sbit DIG3 = P1^2;
sbit DIG4 = P1^3;
// 初始化函数
void init()
{
// 关闭蜂鸣器和继电器
// TODO: 根据实际连接,设置相应的GPIO口为输出,并将其置为适当的状态
// 数码管显示初始化
// TODO: 根据实际连接,设置相应的GPIO口为输出,并将其置为适当的状态
}
// 数码管显示函数
void display(char* text)
{
int i, j;
int delay_time = 1000; // 延时时间,单位为毫秒
// 在数码管上显示文本"PoT."
for (i = 0; i < 4; i++)
{
// TODO: 根据实际连接,设置相应的GPIO口为适当的状态,控制数码管显示字符
// 这里假设函数display_digit(char digit)可以将单个字符显示在数码管上
display_digit(text[i]);
delay_ms(delay_time);
}
}
// LED灯闪烁函数
void blink_leds(sbit* leds, int num_leds, int delay_time)
{
int i;
// 依次控制LED灯的状态,实现闪烁效果
for (i = 0; i < num_leds; i++)
{
leds[i] = 1; // 点亮LED灯
delay_ms(delay_time);
leds[i] = 0; // 熄灭LED灯
delay_ms(delay_time);
}
}
// 主函数
void main()
{
// 初始化单片机和外设
init();
// 显示"PoT."在数码管上,并保持1.5秒
display("PoT.");
delay_ms(1500);
// LED灯1、2、7、8按顺序间隔1秒闪烁
sbit leds1[] = {&LED1, &LED2, &LED7, &LED8};
blink_leds(leds1, sizeof(leds1) / sizeof(leds1[0]), 1000);
// 4秒后,LED灯3、4、5、6以1秒间隔闪烁
delay_ms(4000);
sbit leds2[] = {&LED3, &LED4, &LED5, &LED6};
blink_leds(leds2, sizeof(leds2) / sizeof(leds2[0]), 1000);
// 2秒后,所有LED灯全亮
delay_ms(2000);
LED1 = LED2 = LED3 = LED4 = LED5 = LED6 = LED7 = LED8 = 1;
while (1)
{
// 主循环
// 可以在这里添加额外的代码逻辑或功能
}
}
上述代码只是一个示例,具体的GPIO引脚分配和操作可能需要根据你的硬件连接进行调整。同时,你可能需要查阅CT107D单片机的资料和文档来了解其寄存器和功能的详细信息,以及使用合适的编译器和开发环境进行编译和调试。
希望以上信息对你有帮助。
根据题意,简单的构思了一小段代码思路,供你参考:
#include <CT107D.h>
// 定义数码管显示模式
#defineDigitMode1 0x80
#defineDigitMode2 0x40
#defineDigitMode3 0x20
#defineDigitMode4 0x10
// 定义数码管显示数据
#defineDigit0 0x03
#defineDigit1 0x09
#defineDigit2 0x25
#defineDigit3 0x2D
#defineDigit4 0x07
#defineDigit5 0x1B
#defineDigit6 0x13
#defineDigit7 0x3E
#defineDigit8 0x7A
#defineDigit9 0x62
void main(void)
{
// 初始化 CT107D 单片机
Init();
// 关闭蜂鸣器和继电器等无关外设
AnologPinOutput(0, 0);
DigitalPinOutput(5, 0);
DigitalPinOutput(6, 0);
DigitalPinOutput(7, 0);
DigitalPinOutput(8, 0);
DigitalPinOutput(9, 0);
DigitalPinOutput(10, 0);
DigitalPinOutput(11, 0);
DigitalPinOutput(12, 0);
DigitalPinOutput(13, 0);
DigitalPinOutput(14, 0);
DigitalPinOutput(15, 0);
DigitalPinOutput(16, 0);
DigitalPinOutput(17, 0);
DigitalPinOutput(18, 0);
DigitalPinOutput(19, 0);
DigitalPinOutput(20, 0);
DigitalPinOutput(21, 0);
DigitalPinOutput(22, 0);
DigitalPinOutput(23, 0);
DigitalPinOutput(24, 0);
DigitalPinOutput(25, 0);
DigitalPinOutput(26, 0);
DigitalPinOutput(27, 0);
DigitalPinOutput(28, 0);
DigitalPinOutput(29, 0);
DigitalPinOutput(30, 0);
DigitalPinOutput(31, 0);
// 设置数码管显示模式为独立位显示,共阴极,亮度高,无小数点
SetDigitMode(DigitMode1 | DigitMode2 | DigitMode3 | DigitMode4);
SetDigitBrightness(15);
SetDigitDecPointMode(0);
// PoT.居中显示并保持 1.5 秒
SetDigitData(0, Digit8); // Po
SetDigitData(1, Digit5); // T.
DelayMs(1500); // 保持 1.5 秒
ClearDigitData(0); // Po 清空
ClearDigitData(1); // T. 清空
// LED 灯 1 2 7 8 按顺序间隔 1s 闪烁,4s 后 3 4 5 6 灯以 1s 间隔闪烁,2 秒后全亮
int i;
for (i = 0; i < 6; i++) {
SetDigitData(i, Digit8); // 全亮
DelayMs(2500); //等待2.5秒
ClearDigitData(i); // 全灭
DelayMs(2500); //等待2.5秒
#如有帮助,恭请采纳
项目写好之后,led与beep也有初始化,烧录到开发板中,发现没有操作的LED灯暗亮、频闪,蜂鸣器有时也会咔咔响,如下视频,拍的不清楚,可以看到我操作的一个LED常亮,其他的灯在项目中并未操作,却会突然闪一下,或者微微亮
【BUG】CT107D开发板LED灯频闪、暗亮(已解决)
CT107D是什么单片机?
回答部分参考、引用ChatGpt以便为您提供更准确的答案: 基于CT107D单片机达到以下要求的初始化步骤如下:
通过编写适当的程序代码,结合CT107D单片机的引脚和外设连接情况,可以实现上述酷炫的开机方式。
CT107D单片机DS18b20程序
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P1^4;
uchar code tab_duan[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xbf,0xff};
uchar yi,er,san,si,wu,liu,qi,ba;
long wendu;
void All_Init();
void Delay1ms();
void Delay500us();
void Delay80us();
void Display1(uchar yi,uchar er);
void Display2(uchar san,uchar si);
void Display3(uchar wu,uchar liu);
void Display4(uchar qi,uchar ba);
void init_ds18b20(void);
unsigned char Read_DS18B20(void);
void Write_DS18B20(unsigned char dat);
long TemperGet();
void main()
{
All_Init();
yi=21;er=21;san=21;si=21;wu=21;liu=21;qi=21;ba=21;
while(1)
{
wendu = TemperGet();
yi=wendu/100000;er=wendu%100000/10000+10;san=wendu%10000/1000;si=wendu%1000/100;
Display1(yi,er);
Display2(san,si);
Display3(wu,liu);
Display4(qi,ba);
}
}
//DS18B20设备初始化
void init_ds18b20(void)
{
DQ = 0;
Delay500us();
DQ = 1;
Delay500us();
}
void Delay80us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 1;
j = 217;
do
{
while (--j);
} while (--i);
}
//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay80us();
DQ = 1;
dat >>= 1;
}
}
//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ == 1)
{
dat |= 0x80;
}
Delay80us();
}
return dat;
}
void Delay500us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 6;
j = 93;
do
{
while (--j);
} while (--i);
}
long TemperGet()
{
uchar low,high;
long temp;
init_ds18b20();
Write_DS18B20(0xcc);//忽略ROM指令
Write_DS18B20(0x44);//直接温度转换
Delay500us();
init_ds18b20();
Write_DS18B20(0xcc);//忽略ROM指令
Write_DS18B20(0xbe);//读寄存器指令
//Delay500us();
low = Read_DS18B20();
high = Read_DS18B20();
temp = (high&0x0f);
temp <<=8;
temp|=low;
temp = temp*625;
return temp;
}
void All_Init()
{
P2=0xa0;P0=0x00;//关闭蜂鸣器,继电器
P2=0x80;P0=0xff;//关闭小灯
P2=0xc0;P0=0xff;//选中8个数码管
P2=0xe0;P0=0xff;//关闭选中的8个数码管
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void Display1(uchar yi,uchar er)
{
P2=0xc0;
P0=0x01;
P2=0xe0;
P0=tab_duan[yi];
Delay1ms();
P2=0xc0;
P0=0x02;
P2=0xe0;
P0=tab_duan[er];
Delay1ms();
}
void Display2(uchar san,uchar si)
{
P2=0xc0;
P0=0x04;
P2=0xe0;
P0=tab_duan[san];
Delay1ms();
P2=0xc0;
P0=0x08;
P2=0xe0;
P0=tab_duan[si];
Delay1ms();
}
void Display3(uchar wu,uchar liu)
{
P2=0xc0;
P0=0x10;
P2=0xe0;
P0=tab_duan[wu];
Delay1ms();
P2=0xc0;
P0=0x20;
P2=0xe0;
P0=tab_duan[liu];
Delay1ms();
}
void Display4(uchar qi,uchar ba)
{
P2=0xc0;
P0=0x40;
P2=0xe0;
P0=tab_duan[qi];
Delay1ms();
P2=0xc0;
P0=0x80;
P2=0xe0;
P0=tab_duan[ba];
Delay1ms();
}