本节主要介绍了ISP软件上的虚拟LED,数码管和虚拟键盘等仿真功能的使用流程及注意事项
虚拟LED
虚拟数码管
虚拟键盘
任务1:P2口流水灯,P10闪烁
- void TASK_1( void )
- {
- LED40_SetPort(2,~P2_STATE); //点亮P20端口
- P2_STATE = (P2_STATE<<1); //1000 0000 _> 1 0000 0000
- if( P2_STATE == 0 )
- {
- P2_STATE = 1;
- }
-
- if( P10_STATE == 0)
- {
- LED40_SetBit(1,0);
- }
- else
- {
- LED40_ClrBit(1,0);
- }
- P10_STATE = !P10_STATE;
- }
- u32 KEY_Count = 0;
复制代码
任务2:左边数码管显示P32按下次数 右边数码管显示P33按下次数
- void TASK_2( void )
- {
- KEY_Count = KEY1_COUNT *10000 + KEY2_COUNT;
- SEG7_ShowLong(KEY_Count ,10);
- }
- u32 REC_NUM = 0;
复制代码
任务3:按下数字按键在数码管显示对应的按键数字
- void TASK_3( void )
- {
- SEG7_ShowLong( REC_NUM ,10);
- }
复制代码
课后练习
io.c
- #include "io.h"
-
- u16 cnt1,cnt2;
- u16 Key_Vol[3] ; //按键按下持续时间
-
- u8 code t_display[]={ //标准字库
- // 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
- //black - H J K L N o P U t G Q r M y
- 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
- 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
-
- u8 cod[8] = {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40};
-
- void KEY_Task(void)
- {
- if( P32 == 0 )
- {
- Key_Vol[0]++;
- if( Key_Vol[0]==5 )
- {
- //按键按下的任务
- cnt1++;
- }
- }
- else
- {
- Key_Vol[0] = 0;
- }
-
- if( P33 == 0 )
- {
- Key_Vol[1]++;
- if( Key_Vol[1]==5 )
- {
- //按键按下的任务
- cnt2++;
- }
- }
- else
- {
- Key_Vol[1] = 0;
- }
- }
-
- u8 index=0;
- u8 overflag = 0;
-
- void Task_4(void)
- {
- SEG7_ShowCode(cod);
- switch(rec_vkey)
- {
- case 0:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 1:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 2:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 3:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 4:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 5:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 6:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 7:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 8:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- case 9:cod[index] = t_display[rec_vkey];rec_vkey = 0xff;index++;if(index > 8){overflag = 1;index = 0;}break;
- default:rec_vkey = 0xff;break;
- }
-
- if(overflag)
- {
- overflag = 0;
- if((cod[0]==t_display[1]) && (cod[1]==t_display[2]) && (cod[2]==t_display[3]) && (cod[3]==t_display[4]) && \
- (cod[4]==t_display[5]) && (cod[5]==t_display[6]) && (cod[6]==t_display[7]) && (cod[7]==t_display[8]))
- {
- cod[0] = 0x00;
- cod[1] = 0x00;
- cod[2] = 0x00;
- cod[3] = 0x00;
- cod[4] = 0x5C;
- cod[5] = 0x73;
- cod[6] = 0x79;
- cod[7] = 0x37;
- }
- else
- {
- cod[0] = 0x40;
- cod[1] = 0x40;
- cod[2] = 0x40;
- cod[3] = 0x40;
- cod[4] = 0x40;
- cod[5] = 0x40;
- cod[6] = 0x40;
- cod[7] = 0x40;
- }
- }
-
- }
复制代码
io.h
- #ifndef __IO_H
- #define __IO_H
-
- #include "config.h" //调用头文件
-
- void KEY_Task(void);
- void Task_4(void);
- #endif
复制代码
|