Thiết kế chương trình đồng hồ điện tử Thiết kế 51 máy tính chip đơn với đồng hồ báo thức và thời gian có thể điều chỉnh
Thiết kế chương trình đồng hồ điện tử Thiết kế 51 máy tính chip đơn với đồng hồ báo thức và thời gian có thể điều chỉnh
Phần cứng:
Dựa trên 51 máy vi tính chip đơn, chip đồng hồ ds1302, chip nhiệt độ ds18b20 và màn hình tinh thể lỏng 1602 thời gian thực và hiển thị nhiệt độ thời gian thực. Đồng thời, năm, tháng, ngày, giờ, phút và ngày trong tuần có thể được thiết lập thông qua các nút. Và bạn có thể cài đặt đồng hồ báo thức. Khi hết thời gian báo thức, còi sẽ tiếp tục kêu bíp, đồng thời, đèn led tiếp tục nhấp nháy và không nhấn nút dừng được chỉ định trong vòng một phút, đồng hồ báo thức sẽ tự động dừng. . .
Phần mềm:
#include
#define uchar unsigned char
#define uint unsigned int
sbit spk = P1 ^ 7;
sbit dẫn = P1 ^ 5;
sbit DQ = P1 ^ 0;
sbit RS = P2 ^ 4;
sbit RW = P2 ^ 5;
sbit EN = P2 ^ 6;
sbit key1 = P2 ^ 0;
sbit key2 = P2 ^ 1;
khóa sbit3 = P2 ^ 2;
khóa sbit4 = P2 ^ 3;
sbit IO = P3 ^ 6;
sbit RST = P3 ^ 7;
sbit SCLK = P3 ^ 5;
bảng mã uchar [] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
int nian, xing, yue, ri, shi, fen, miao;
uchar num, temp, c, d, time [7], a, b, aa, bb, ns, ng, ys, yg, rs, rg, ss, sg, fs, fg, ms, mg, flag;
/ ******************* 1602 ************************ /
void delay (int z)
{
int x, y;
cho (x = z; x> 0; x--)
for (y = 100; y> 0; y--);
}
void write_com (uchar com) // ghi lệnh
{
RS = 0;
P0 = com;
chậm trễ (5);
EN = 1;
chậm trễ (5);
EN = 0;
}
void write_data (uchar date) // ghi dữ liệu
{
RS = 1;
P0 = ngày tháng;
chậm trễ (5);
EN = 1;
chậm trễ (5);
EN = 0;
}
void init () // khởi tạo
{
RW = 0;
EN = 0;
write_com (0x38); // Cài đặt chế độ hiển thị
write_com (0x0c); // Màn hình mở, không có con trỏ, không nhấp nháy
write_com (0x06); // Viết ký tự Con trỏ trỏ địa chỉ cộng một, toàn bộ màn hình không di chuyển
write_com (0x01); // Hiển thị rõ ràng
ghi_com (0x80 + 0x04);
ghi_data ('2');
ghi_com (0x80 + 0x05);
ghi_data ('0');
ghi_com (0x80 + 0x00);
ghi_data ('c');
ghi_com (0x80 + 0x01);
ghi_data ('a');
ghi_com (0x80 + 0x02);
ghi_data ('i');
ghi_com (0x80 + 0x4e);
ghi_data (0xdf);
ghi_com (0x80 + 0x4f);
ghi_data ('C');
ghi_com (0x80 + 0x4b);
write_data (0x2e); // Hiển thị "."
}
/ ************** DS18B20 **************** /
void delay1 (unsigned int t) // Hàm trì hoãn
{
trong khi (t--);
}
void init1 () // khởi tạo
{
uchar n = 0;
DQ = 1; // Đặt lại DQ
chậm trễ1 (8);
DQ = 0; // Máy chủ kéo DQ xuống thấp
delay1 (80); // Độ trễ lớn hơn 480us
DQ = 1;
delay1 (5); // Trì hoãn 15 ~ 60us
n = DQ;
delay1 (5); // Nếu n = 0 thành công ban đầu n = 1 thất bại ban đầu (bạn có thể đặt giá trị trả về để xem n có phải là 1 hay không)
}
void write_byte (uchar dat) // Ghi một byte
{
uint tôi;
cho (i = 0; i <8; i ++)
{
DQ = 0;
DQ = dat & 0x01;
chậm trễ1 (12);
DQ = 1;
dat >> = 1;
}
trễ1 (4);
}
uchar read_byte () // Đọc trong một byte
{
uint k = 0;
giá trị uchar = 0;
for (k = 0; k <8; k ++)
{
DQ = 0;
giá trị >> = 1;
DQ = 1;
nếu (DQ)
giá trị | = 0x80;
trễ1 (4);
}
giá trị trả về;
}
uchar read_temp () // Đọc hàm nhiệt độ
{
uchar a = 0, b = 0;
init1 ();
ghi_byte (0xcc);
ghi_byte (0x44);
chậm trễ1 (200);
init1 ();
ghi_byte (0xcc);
ghi_byte (0xbe);
a = read_byte ();
b = read_byte ();
c = b;
d = a;
b << = 4;
b + = (a & 0xf0) >> 4;
trả lại b;
}
/ *********************** 1302 ********************** /
void wirte_byte1 (uchar date) // Ghi byte
{
uchar tôi;
cho (i = 8; i> 0; i--)
{
IO = ngày & 0x01;
SCLK = 0;
SCLK = 1;
date = ngày >> 1;
}
}
uchar read_byte1 () // Đọc một byte
{
uchar dat, i;
cho (i = 8; i> 0; i--)
{
dat = dat >> 1;
SCLK = 0;
nếu (IO)
dat = dat | 0x80;
SCLK = 1;
}
return (dat);
}
void write_ds1302 (uchar add, uchar date) // ghi dữ liệu vào 1302
{
RST = 0;
SCLK = 0;
RST = 1;
wirte_byte1 (thêm);
wirte_byte1 (ngày tháng);
RST = 0;
SCLK = 1;
}
uchar read_ds1302 (uchar add) // Đọc dữ liệu trong 1302
{
nhiệt độ uchar;
RST = 0;
SCLK = 0;
RST = 1;
wirte_byte1 (thêm);
temp = read_byte1 ();
RST = 0;
SCLK = 0;
trở lại (tạm thời);
}
uchar huan_BCD (uint z) // Chuyển đổi dữ liệu thành BCD
{
uint a, b;
a = z / 10;
b = z;
a = a & 0xff;
b = b & 0xff;
a << = 4;
a = a | b;
return (a);
}
void xian_shi () // Hàm hiển thị LCD
{
nếu (b == 0 & a == 0)
{
ms = thời gian [0] / 16;
mg = thời gian [0];
fs = thời gian [1] / 16;
fg = time [1];
fen = fs * 10 + fg;
ss = time [2] / 16;
sg = time [2];
shi = ss * 10 + sg;
rs = time [3] / 16;
rg = time [3];
ri = rs * 10 + rg;
ys = thời gian [4] / 16;
yg = time [4];
yue = ys * 10 + yg;
ns = thời gian [6] / 16;
ng = time [6];
nian = ns * 10 + ng;
xing = time [5];
}
nếu (a == 1 | b == 1)
{
ss = shi / 10;
sg = shi;
ghi_com (0x80 + 0x41);
ghi_data (0xff);
ghi_com (0x80 + 0x40);
ghi_data (table [ss]);
ghi_com (0x80 + 0x41);
ghi_data (table [sg]);
}
nếu (a == 2 | b == 2)
{
fs = fen / 10;
fg = fen;
ghi_com (0x80 + 0x44);
ghi_data (0xff);
ghi_com (0x80 + 0x43);
ghi_data (table [fs]);
ghi_com (0x80 + 0x44);
ghi_data (table [fg]);
}
if (a == 3)
{
rs = ri / 10;
rg = ri;
ghi_com (0x80 + 0x0d);
ghi_data (0xff);
ghi_com (0x80 + 0x0c);
ghi_data (table [rs]);
ghi_com (0x80 + 0x0d);
write_data (table [rg]);
}
if (a == 4)
{
ys = yue / 10;
yg = yue;
ghi_com (0x80 + 0x0a);
ghi_data (0xff);
ghi_com (0x80 + 0x09);
ghi_data (table [ys]);
ghi_com (0x80 + 0x0a);
write_data (table [yg]);
}
if (a == 5)
{
ns = nian / 10;
ng = nian;
ghi_com (0x80 + 0x07);
ghi_data (0xff);
ghi_com (0x80 + 0x06);
ghi_data (table [ns]);
ghi_com (0x80 + 0x07);
write_data (table [ng]);
}
if (a == 6)
{
ghi_com (0x80 + 0x0f);
ghi_data (0xff);
ghi_com (0x80 + 0x0f);
write_data (table [xing]);
}
write_com (0x80 + 0x06); // Hiển thị năm ở chữ số thứ bảy và thứ tám trên dòng đầu tiên của màn hình LCD
ghi_data (table [ns]);
write_com (0x8
-
Sự khác biệt giữa phát triển nhúng và phát triển vi điều khiển là gì[2020-08-16]
-
Phát triển máy vi tính chip đơn cho bo mạch giải pháp thuốc lá điện tử vamo650[2020-05-26]
-
Bảng phát triển MCU là gì?[2020-08-16]
-
Bộ điều khiển chuyển động hai trục CT1201 / Phát triển bộ điều khiển máy đóng gói / thiết kế bộ điều khiển chuyên nghiệp[2020-09-04]