第47节:操作AT24C02利用定时器延时改善数码管的闪烁
时间:11-22
来源:互联网
点击:
- if(uiSetData4>9999)
- {
- uiSetData4=0;//最小值是0
- }
- write_eeprom_int(6,uiSetData4); //存入EEPROM,由于内部有延时函数,所以此处会引起数码管闪烁
- ucWd4Update=1;//窗口4更新显示
- break;
- }
- ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
- uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
- ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
- ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
- break;
- case 3:// 切换窗口按键 对应朱兆祺学习板的S9键
- ucWd++;//切换窗口
- if(ucWd>4)
- {
- ucWd=1;
- }
- switch(ucWd)//在不同的窗口下,在不同的窗口下,更新显示不同的窗口
- {
- case 1:
- ucWd1Update=1;//窗口1更新显示
- break;
- case 2:
- ucWd2Update=1;//窗口2更新显示
- break;
- case 3:
- ucWd3Update=1;//窗口3更新显示
- break;
- case 4:
- ucWd4Update=1;//窗口4更新显示
- break;
- }
- ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
- uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
- ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
- ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
- break;
- }
- }
- void display_drive(void)
- {
- //以下程序,如果加一些数组和移位的元素,还可以压缩容量。但是鸿哥追求的不是容量,而是清晰的讲解思路
- switch(ucDisplayDriveStep)
- {
- case 1://显示第1位
- ucDigShowTemp=dig_table[ucDigShow1];
- if(ucDigDot1==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xfe);
- break;
- case 2://显示第2位
- ucDigShowTemp=dig_table[ucDigShow2];
- if(ucDigDot2==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xfd);
- break;
- case 3://显示第3位
- ucDigShowTemp=dig_table[ucDigShow3];
- if(ucDigDot3==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xfb);
- break;
- case 4://显示第4位
- ucDigShowTemp=dig_table[ucDigShow4];
- if(ucDigDot4==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xf7);
- break;
- case 5://显示第5位
- ucDigShowTemp=dig_table[ucDigShow5];
- if(ucDigDot5==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xef);
- break;
- case 6://显示第6位
- ucDigShowTemp=dig_table[ucDigShow6];
- if(ucDigDot6==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xdf);
- break;
- case 7://显示第7位
- ucDigShowTemp=dig_table[ucDigShow7];
- if(ucDigDot7==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xbf);
- break;
- case 8://显示第8位
- ucDigShowTemp=dig_table[ucDigShow8];
- if(ucDigDot8==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0x7f);
- break;
- }
- ucDisplayDriveStep++;
- if(ucDisplayDriveStep>8)//扫描完8个数码管后,重新从第一个开始扫描
- {
- ucDisplayDriveStep=1;
- }
- }
- //数码管的74HC595驱动函数
- void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01)
- {
- unsigned char i;
- unsigned char ucTempData;
- dig_hc595_sh_dr=0;
- dig_hc595_st_dr=0;
- ucTempData=ucDigStatusTemp16_09;//先送高8位
- for(i=0;i<8;i++)
- {
- if(ucTempData>=0x80)dig_hc595_ds_dr=1;
- else dig_hc595_ds_dr=0;
- dig_hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器
- delay_short(1);
- dig_hc595_sh_dr=1;
- delay_sh
AT24C02定时器延时数码 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)