完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
#include #include #define uint unsigned int #define uchar unsigned char uchar const table[16]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d, 0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79, 0x71};//将BCD码转换成数码管扫描码的数组 //将不需要变动的数据放在程序存储区里 //如果写成uchar const ,就是放在数据存储区里 void delay(uint n) { uint i,j; for(i=0;i } void show(uint num) { uint bai,shi,ge; bai=num/100; shi=num%100/10; ge=num%10; PORTA|=BIT(3); //导通U6(段选)的573 PORTB=table[bai]; //显示0 PORTA&=~BIT(3); //关闭U6的573 PORTB=0xff; PORTA|=BIT(4); //导通U7(位选)的573 PORTB=0xfe; PORTA&=~BIT(4); //关闭U7(位选)的573 delay(5); PORTA|=BIT(3); //导通U6(段选)的573 PORTB=table[shi]; //显示0 PORTA&=~BIT(3); //关闭U6的573 PORTB=0xff; PORTA|=BIT(4); //导通U7(位选)的573 PORTB=0xfd; PORTA&=~BIT(4); //关闭U7(位选)的573 delay(5); PORTA|=BIT(3); //导通U6(段选)的573 PORTB=table[ge]; //显示0 PORTA&=~BIT(3); //关闭U6的573 PORTB=0xff; PORTA|=BIT(4); //导通U7(位选)的573 PORTB=0xfb; PORTA&=~BIT(4); //关闭U7(位选)的573 delay(5); } void main() { uint temp; uchar i; temp=0; DDRA|=BIT(3); DDRA|=BIT(4); DDRB=0xff; DDRD|=0x0f; PORTD|=0x0f; DDRD&=0xf0; while(1) { i=PIND; i=i&0x0f; if(i==0x0d) { delay(5); if(i==0x0d) { temp++; if(temp==1000) temp=0; while(!(i==0x0d)); //按键释放 } } show(temp); } } 我的想法是按键按下数字加1,然后再数码管上显示,但是按键按下后,一次加了好几个数,而并不是加1,我想是按键释放的程序没有运行,但我不知道如何修改,求高手指点,谢谢! |
|
相关推荐
15 个讨论
|
|
|
谢谢!不是那个原因,而是按键释放程序不正确,应该是还要将PD口的状态读回来!
|
|
|
|
|
|
|
|
|
是的,我是一个学生,刚学单片机不久,请问这位高手能写一个更好的程序给我看看吗?谢谢!
还有,我能加你qq,向你请教一些问题?谢谢!我qq:893005737,本人将不甚感激。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5658 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
8116 浏览 0 评论
3361 浏览 2 评论
3346 浏览 1 评论
10517 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 05:55 , Processed in 1.080219 second(s), Total 85, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4174