|
发表于 2023-7-6 10:49:45
|
显示全部楼层
本帖最后由 xbl2473*** 于 2023-7-6 10:51 编辑
第十集的学习日记:
数码管的动态刷新原理就是选择需要打开的数码管,给该数码管的8位发光二极管赋值,
控制不同的发光二极管的亮灭,从而显示不同的数字图案。
控制原理:在选择完数码管后输出对应的位码,再输出该位码的段码,以此类推,直到
所有数码管都显示完毕。
位码和段码可以写成两个数组。需要使用时直接调用 位码[索引]=段码[索引] 即可方便
显示内容。
多个数码管的循环时间不能大于20ms,一旦超过20ms,将会出现断断续续的现象。
课后练习:
一、做一个简易时钟,功能如下
1.初始状态显示00-00-00
int wei[] = {0(第一位地址),1(第二位地址)...7(第八位地址)};
int duan[] = {0,1,2,3,4,5,6,7,8,9,-};
void CLOCK_init(){
wei[0] = duan[0]; //数字0
wei[1] = duan[0];
wei[2] = duan[10]; //图形-
wei[3] = duan[0]; //分针
wei[4] = duan[0];
wei[5] = duan[10]; //图形-
wei[6] = duan[0]; //秒针
wei[7] = duan[0];
}
void main(){
CLOCK_init();
}
2.每隔一秒钟,秒+1,一分钟,分+1
全局变量
int FIRST_second = 0;
int SECOND_second = 0;
int FIRST_minute = 0;
int SECOND_minute = 0;
void time_add(){
while(1){
wei[3] = duan[SECOND_minute]; //分针
wei[4] = duan[FIRST_minute];
wei[6] = duan[SECOND_second]; //秒针
wei[7] = duan[FIRST_second];
delay(1000);
FIRST_second++;
//秒针
if(FIRST_second == 10){
SECOND_second++;
FIRST_second =0;
}
if(SECOND_second == 6){
FIRST_minute++;
SECOND_second =0;
}
//分针
if(FIRST_minute == 10){
SECOND_minute++;
FIRST_minute =0;
}
if(SECOND_minute == 6){
SECOND_minute =0;
}
}
}
void main(){
CLOCK_init();
time_add();
}
3.时间到达00 - 00 - 30,蜂鸣 3秒表示闹钟
sbit beep = P5^3;
void BEEP_3sec(){
if(SECOND_minute == 3){
beep = 1;
delay(3000);
beep = 0;
}
} |
|