第9集 数码管上
数码管的介绍以及外观和类型有哪些。以及数码管组成,还有数码管abcdefgdp的定义,试验箱使用的是4位共阴数码管。如何用ISP软件生成显示数字。还有hc595锁存芯片的使用。hc595数据的传递先进先出,后进数据保存在当前595并锁存输出。由于人眼的识别频率在50hz左右,所以数码管数据刷新率要在20ms以内否则人眼就会看到明显的抖动。还有这节课作业:
可以设置一个10ms的调度程序,并设置一个全局变量类型为无符号的int类型每完成一次调度变量+1,由于Task_Comps是在c文件定于所以一个问题无法在io.c里面直接关闭调度,所以办法就是按下一个按键发送一个对一个变量进行处理,当按下按键后,调度程序不在对数据进行自增。部分代码如下
- void PLED_40(void)
- {
- u8 cod[8];
- cod[0] = 0x0f; //表示开启P0-P3
- cod[1] = 0X01; //P0端口
- cod[2] = 0X01; //P1
- cod[3] = ~T_NUM[state_now]; //P2
- cod[4] = 0X01; //P3
- LED40_SendData( cod,5 );
-
- P2 = ~T_NUM[state_now];
-
- state_now++;
- if( state_now>7 )
- state_now = 0;
- }
-
- void SEG_PC( void )
- {
- u8 cod[8];
-
-
- // cod[0] = SEG_NUM[shi/10]; //小时的十位数的数码管段码
- // cod[1] = SEG_NUM[shi%10];
- // cod[2] =SEG_NUM[16]; //数码管刷段码和位码
-
- // cod[3] = SEG_NUM[fen/10]; //分钟
- cod[0] = SEG_NUM[1]; //小时的十位数的数码管段码
- cod[1] = 0xBF; //SEG_NUM[shi%10];
- cod[2] = SEG_NUM[0]; //数码管刷段码和位码
- cod[3] = SEG_NUM[0]; //分钟
- cod[4] = SEG_NUM[time%1000];
- cod[5] =(SEG_NUM[time%100/10])|0x80; //数码管刷段码和位码
- cod[6] = SEG_NUM[time/10%10]; //分钟
- cod[7] = SEG_NUM[time%10];
-
- SEG7_ShowCode(cod);
- }
复制代码
使用擎天柱模拟8位数码管输出。
- void KEY_Task(void)
- {
- if( P32 == 0 )
- {
- Key_Vol[0]++;
- if( Key_Vol[0]==5 )
- {
- //按键按下的任务
- //printf( "按键单击\r\n" );
- timestop=1;
- }
- }
- else
- {
- Key_Vol[0] = 0;
- }
- }
复制代码
- void TIMECOUNT_Task(void)
- {
- if(timestop==0)
- time++;
- if(time>3000) time=0;
- }
复制代码
程序还需部分优化,按下一次按键开始计时,在按一下停止计时。现只有停止计时还无恢复计时部分。
|