/*
1.主题:串口交互数字滚动循环显示
器件:ESP32主控板1块,四位数码管1个,74HC595移位寄存器芯片(或模块)及相应辅件。以上模块也可使用分立器件结合面包板搭建。
任务要求:
使用74HC595移位寄存器芯片控制四位数码管实现数字的滚动循环显示,通过串口输入报文来设置显示的内容及其滚动显示的时间间隔。
报文的格式为:xxxx:yyy,其中,xxxx为显示的内容,范围1000~9999,yy为时间间隔。示例报文为:4567:400,其中:4567为数码管
显示的数字:400表示所输入数字循环显示的时间间隔,
数字自右向左循环动态显示,
具体任务要求如下:
(1)装置通电启动后,在四位数码管上显示今天的日期:0914:
(2)在串口监视器中输入相应的报文,并点击发送按键。将解析后的报文内容输出到串口监视器。以报文4567:400为例,串口监视器窗口输
出的内容为Data:4567-Interval::400;
(3)在四位数码管上显示解析后的内容,并以指定的时间间隔,实现自右向左循环动态显示。直至输入新的报文数据:
(4)程序采用C代码编写,不得使用外部库调用:
(5)未作规定处可自行处理,无明显与事实违背即可。
说明:请考生在考试结束前,按照如下要求提交相关文件。
(1)将程序放在一个文件夹中,压缩为1个“rar或zip”格式文件,并命名为:DjKS5_身份证号,大小5M以下;
(2)将程序文件通过“上传附件”按钮进行上传;
(3)程序编写过程中不得打开其它示例程序,如发现,实操成绩按照0分处理。
参考资料:
数组NUM中保存的是0~9十六进制形式的数码管显示的段位信息。编程时可参考使用。
∥保存09
byte NUM[]={0xFC,0x60,OxDA,0xF2,0x66,0xB6,0xBE,0xE0,OxFE,OxF6};
*/
const int dataPin = 2; //Ds(D)
const int clockPin = 4; //SH_CP(C)
const int latchPin = 16; //ST_CP(L)
const byte NUM[]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6}; //保存0~9和!.
int digit = 2;
//在4位数码管第2位显示
//显示的具体数字'2',number 值为10时显示!
int n=914,interval=1000;
unsigned long oldtime=0;
void setup() {
Serial.begin(115200);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
digitalWrite(clockPin, LOW);
digitalWrite(latchPin, LOW);
//初始化引脚为低电平状态
//初始化引脚为低电平状态
for(int i=5;i>0;i--){
specialDigitDisplay(2,i);
}
}
void loop(){
//=======================
// 在指定位上显示指定的数字
// digit:数码管的位号,从左到右依次为1~4
//num:显示的数字
//=======================
}
void specialDigitDisplay(int digit, int num){
byte val = 0;
val= bitSet(val, digit - 1);
shiftOut(dataPin, clockPin, MSBFIRST, val);
//将digit对应位号置位①
//串行移位函数②
shiftOut(dataPin, clockPin, LSBFIRST,~NUM[num]);//0
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
}