|
鸿哥,学习了你的编程思维,一直在用,但昨天做电子钟的时候,发现就有点故障了,请鸿哥帮忙考虑下解决方案,谢谢!程序大概如下:
while(1){//主循环
1 miao = ds1302_read(0x81); //ds1302读取函数
2 fen = ds1302_read(0x83); //ds1302读取函数
3 shi = ds1302_read(0x85); //ds1302读取函数
4 zhou = ds1302_read(0x8b); //ds1302读取函数
5 shi_10 = (shi>>4)*10 + shi%16; //BCD转换成10进制
6 fen_10 = (fen>>4)*10 + fen%16;//BCD转换成10进制
7 miao_10 = (miao>>4)*10 + miao%16; //BCD转换成10进制
8 lcd19264_draw_hand(31,32,24,miao_10,6,1);//液晶模拟时钟的 秒针点亮
9 lcd19264_draw_hand(31,32,18,fen_10,6,1);//液晶模拟时钟的 分针点亮
10 lcd19264_draw_hand(31,32,10,shi_10,12,1);//液晶模拟时钟的 时针点亮
11 temperature_process();//ds18b20读取函数,并且将数据处理成百位,个位,十位,小数位
lcd19264_display_number_16x32(2,11,miao/16);//液晶对应位置上显示时分秒
lcd19264_display_number_16x32(2,12,miao%16);//液晶对应位置上显示时分秒
lcd19264_display_number_16x32(2,8,fen/16);//液晶对应位置上显示时分秒
lcd19264_display_number_16x32(2,9,fen%16);//液晶对应位置上显示时分秒
lcd19264_display_number_16x32(2,5,shi/16);//液晶对应位置上显示时分秒
lcd19264_display_number_16x32(2,6,shi%16);//液晶对应位置上显示时分秒
lcd19264_display_number_8x16(4,11,zhou%16);////液晶对应位置上显示周
12 lcd19264_draw_hand(31,32,24,miao_10,6,0); ////液晶模拟时钟 秒针熄灭
13 lcd19264_draw_hand(31,32,18,fen_10,6,0);///液晶模拟时钟 分针熄灭
14 lcd19264_draw_hand(31,32,10,shi_10,12,0);////液晶模拟时钟 时针熄灭
}
程序执行时均能工作,但发现液晶模拟时钟上的时、分、秒的指针很明显的闪动。个人分析是因为1-7行程序执行时间太长,导致12--14执行完指针熄灭后没有及时点亮指针所致,之前按照鸿哥思想将1--7条读取程序放到定时器中断中,根据switch切换,每次进中断分别读取1--7条,也就是说进7次中断,可以读完1--7条的数据,定时时间2ms--50ms均试过,均发现液晶显示乱码,个人估计是中断干扰了液晶的驱动程序,本人实在不知如何改动,请鸿哥指教,谢谢……
|
|