单片机 加减计数器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.分析:定义变量记录按下次数 分析: 分析
(1)键盘:判断按键按下
(延时去抖动)
(2)显示:
延时1ms点亮 动态扫描7步 段码表
4.流程图 流程图
(1)主函数流程图
开始
初始化
key1
N N key2
Y
key3 N Y Y
动态显示
结束
此处 即为初始化问题 (1)直接赋值 (2)跳转命令goto
加/减计数器 减计数器
----单片机编程
1.电路设计 电路设计
2.设计要求 设计要求
(1)按键1计数范围0~99,每按一下显示数 值加1。当显示值为99时,继续计数显示默认 为0,继续计数。 (2)按键2计数范围0~99,每按一下显示数 值减1。当显示值为0时,继续计数显示默认从 100开始。 (3)按键3为复位键,无论计数值为多少,按 下复位键显示数值将刷新为0。
Y熄灭
结束
void delay(unsigned int n)
{ unsigned int x,y; for(x=0;x<n;x++){ for(y=0;y<121;y++){ ; } } }
sfr p1=0x90; sbit p3_0=0xb0; sbit p3_1=0xb1; sbit p3_5=0xb5; sbit p3_6=0xb6; sbit p3_7=0xb7; unsigned char i; code unsigned char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int); void display(void); void key1(void); void key2(void); void key3(void); void main(void) { loop: i=0; while(1){ if(p3_5==0){ key1(); (); else key2(); (); else key3(); (); display(); } }
注:goto跳转命令只能从内循环跳转到外循环,不能 从外循环跳转到内循环。
key1 按下
void key1(void) { If(p3_5==0){ ( )
Y
计数值加1
N
delay(10); if(p3_5==0){ i++;
计数值100
if(i==100){ i=0; } do{ do{
Y
N
计数值清0
N
松开 } } }
}while(p3_7==0); }while(p3_7==0);
Y
结束
动态显示 全灭 送入个位数值 点亮并延时 熄灭 送入十位数值 点亮并延时
void display(void) { p3_0=1; p3_1=1; p1=tab[i/10]; p3_0=0; delay(1); p3_0=1; p1=tab[i%10]; p3_1=0; delay(1); p3_1=1; }
N
松开
display( ); }while(p3_5==0); }while(p3_5==0);
Y
结束
} }
}
key2 按下
void key2(void) { If(p3_6==0){ ( )
N
计数值0
delay(10); if(p3_6==0){
Y
N
if(i==0){ i=100; } i--;
计数值100
计数值减1
do{
do{
N
松开
display( ); }while(p3_6==0); }while(p3_6==0);
Y
结束
} }
}
key3
N
按下
Y
初始化
void key3(void) { If(p3_7==0){ ( ) delay(10); if(p3_7==0){ ①i==0; ②goto loop; do{ do{ display( );