日月年切换

 

 

1. html

<span
	class="tab-control-item"
	v-for="(item, index) in state.dateDims"
	:key="index"
	:class="{ active: item.value === state.currentIndex }"
	@click="tabcontrol(item.value)"
>
	<span>{{ item.label }}</span>
</span>

2. js

const state = reactive({
	dateDims: [
		{ label: '日', value: 'day' },
		{ label: '月', value: 'month' },
		{ label: '年', value: 'year' },
	],
	currentIndex: 'day',
});

const tabcontrol = (val) => {
	state.currentIndex = val;
};

3.css

.tab-control {
	width: 200px;
	float: left;
	text-align: center;
}
.tab-control-item {
	// line-height: 30px;
}
.tab-control-item span {
	font-size: 14px;
	padding: 5px 2px;
	margin: 5px;
	color: #333333;
}
.active {
	color: #0164fe;
}
.active span {
	color: #0164fe;
	border-bottom: 2px solid #0164fe;
}

以下是一个基于ATmega328P微控制器的电子钟电路设计,包含两个按键和8个数码管。程序使用Arduino IDE进行编写,可以实现所述的三个功能。 电路图如下: ![电路图](https://i.imgur.com/3t8Q6Z2.png) 程序如下: ```c++ #include <Wire.h> #include <RTClib.h> RTC_DS1307 rtc; int hour = 0; int minute = 0; int second = 0; int current_digit = 0; int current_mode = 0; const int button1 = 2; const int button2 = 3; const int digitPins[] = {4, 5, 6, 7, 8, 9, 10, 11}; const int segments[] = {A0, A1, A2, A3, A4, A5, A6, A7}; const byte digitToSegment[] = { B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110 // 9 }; void setup() { Wire.begin(); rtc.begin(); pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP); for (int i = 0; i < 8; i++) { pinMode(digitPins[i], OUTPUT); digitalWrite(digitPins[i], LOW); pinMode(segments[i], OUTPUT); digitalWrite(segments[i], HIGH); } } void loop() { DateTime now = rtc.now(); hour = now.hour(); minute = now.minute(); second = now.second(); if (digitalRead(button1) == LOW) { current_digit = (current_digit + 1) % 6; delay(200); } if (digitalRead(button2) == LOW) { current_mode = (current_mode + 1) % 2; delay(200); } if (current_mode == 0) { displayTime(); } else { displayDate(now.day(), now.month(), now.year()); } } void displayTime() { int digits[] = {hour / 10, hour % 10, minute / 10, minute % 10, second / 10, second % 10}; for (int i = 0; i < 6; i++) { digitalWrite(digitPins[i], HIGH); for (int j = 0; j < 8; j++) { digitalWrite(segments[j], (digitToSegment[digits[i]] >> j) & 1); } delay(2); digitalWrite(digitPins[i], LOW); } } void displayDate(int day, int month, int year) { int digits[] = {day / 10, day % 10, month / 10, month % 10, year / 1000, (year % 1000) / 100, (year % 100) / 10, year % 10}; for (int i = 0; i < 8; i++) { digitalWrite(digitPins[i], HIGH); for (int j = 0; j < 8; j++) { digitalWrite(segments[j], (digitToSegment[digits[i]] >> j) & 1); } delay(2); digitalWrite(digitPins[i], LOW); } } ``` 程序具体实现了以下功能: 1. 初始化时钟并读取当前时间; 2. 两个按键分别用于切换当前显示的位数和时间/日期模式; 3. 按照当前的时间或日期,依次显示8个数码管的内容。 其中,`displayTime()` 函数用于显示时间,`displayDate()` 函数用于显示日期。这两个函数分别将时间或日期转换为数组,并依次将数组中的数字显示在数码管上。数组中的每个元素都是一个数字,代表数码管应该显示的值。每个数字都由两个数码管表示,因此一共需要8个数字。在循环中,程序会依次将每个数字显示在对应的数码管上,然后延迟2毫秒。最后,切换到下一个数码管并重复此过程,直到所有数码管都被显示一次。 这个程序可以通过Arduino IDE上传到ATmega328P微控制器中。在上传后,程序会自动开始运行,同时数码管会显示当前的时间。按下第一个按键可以切换当前显示的位数,按下第二个按键可以切换时间/日期模式。在时间模式下,数码管会显示时分秒,而在日期模式下,数码管会显示日月。按下按键后,程序会等待200毫秒,以避免按键抖动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值