题目:数码管前三位显示一个跑表,从000到999之间以0.01秒的速度运行,当按下一个独立按键时,跑表停止,按下第二个时计时开始,按下第三个是计数值清零从头开始。(采用定时器中断方式)
解决方案:(C语言编程)
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar bai,shi,ge,num;
uint shu;
sbit s=P1^0;
sbit s2=P1^1;
sbit s3=P1^2;
sbit le=P3^6;
void delay(uint a);
void dis();
void display(uchar ba,uchar sh,uchar g);
uchar code tabledu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc7,0xc0,0xff};
uchar code tablewe[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void init()
{
shu=0;
bai=0;
shi=0;
ge=0;
TMOD=0x11;
TH0=0xd8;
TL0=0xf0;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1){
if(s==0){
delay(5);
if(s==0){
TR0=0;
dis();
}
}
if(s2==0){
delay(5);
if(s2==0){
TR0=1;
dis();
}
}
if(s3==0){
delay(5);
if(s3==0){
TR0=1;
shu=0;
dis();
}
}
dis();
}
}
void time0() interrupt 1
{
TH0=0xd8;
TL0=0xf0;
num++;
shu++;
if(shu==999)
shu=0;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
}
void display(uchar ba,uchar sh,uchar g)
{
le=1;
P2=tablewe[1];
le=0;
le=1;
P0=tabledu[ba];
le=0;
delay(5);
le=1;
P2=tablewe[2];
le=0;
le=1;
P0=tabledu[sh];
le=0;
delay(5);
le=1;
P2=tablewe[3];
le=0;
le=1;
P0=tabledu[g];
le=0;
delay(5);
}
void dis()
{
if(num%1==0)
{
display(bai,shi,ge);
}
if(num%10==0)
{
display(bai,shi,ge);
}
if(num==10)
{
num=0;
display(bai,shi,ge);
}
}
void delay(uint a) {
uint i,j;
for(j=a;j>0;j--)
for(i=250;i>0;i--);
}
关键字:单片机 独立按键
引用地址:
单片机学习——独立按键之二
推荐阅读最新更新时间:2024-03-16 14:44
单片机基础之PIC单片机之I/O控制
I/O控制对于单片机而言是最基础最核心的东西,其实单片机除了AD DA 转换之外的事情。其他大部分的事情I/O口都能做的到。I/O控制简单却能千变万化。 单片机在大部分应用中做的事情,莫过于 输入高低电平 ,输出高低电平。就是通过这简单的控制电平来实现大多数的应用控制。 什么是I/O口? 什么是I/O 就是 IN/OUT 就是 输入/输出。 I/O具体能做什么呢? 如果你是刚刚步入电子的新手,那你最好要知道一下I/O口具体能做什么。感性的认识对你的学习是很有帮助的。I/O口输出一个高(低)电平可以用来点亮一个LED灯,可以接通过一个继电器,来开启电机,来开启音响。开启许多的东西,也可以用于通信等等。输入一个高(
[单片机]
单片机_rom_ram,程序容量之迷
引言 单片机的内存有大小之分,内存大的相对较贵,如何选择大小,是个头疼问题,此文是自己在编程过程中遇到和ram,rom大小有关的问题。 1.单片机中xdata 和data xdata是指片外的ram数据,data是指内部的ram数据。 而STC15中会有逻辑在外,实际在内的ram。如下图: 图1 上图摘自stc15的手册中,如果你的单片机ram只有128个字节,所以选择Memory Model时乖乖选择:Small。如下图: 图2 因为Large 模式,会选择外部ram存放和读取数据,你只有内部ram,所以程序会死(实践中我的串口通讯失效)。 所以官方建议: Memory Model : Speci
[单片机]
[单片机框架][bsp层][nrf51822][nrf51422][nrf51802][bsp_key] KEY配置和使用
按键的基本原理是设置单片机IO口(PB0-PB3)为输入状态,如DDRB = 0XF0(方向寄存器,“1”为输出,“0”为输入); 单片机一直检测按键端口(PB0-PB3)的状态,当端口为低电平时(即按键按下),实行相应的动作(比如控制LED灯)。 原理就是这么回事,但是正真实现时,按键会有抖动,要进行按键去抖,下图为按键按下时的抖动图。 按键实行一个动作过程是需要一定时间的,一般为100mS-1S左右,而一个单片机执行一个机器周期的时间很短,时钟为10MH的周期为0.1μs,这样按键每一次动作程序就会多次检测按键,出现误判(一次按下,多次动作)。 /********************************
[单片机]
单片机方案开发注意事项及如何挑选PIC单片机进行学习
要对PIC单片机进行编程,你需要了解特定的开发工具的基本构件,例如配置寄存器,总线和存储器类型。理解C编程语言、汇编语言等单片机开发语言等。此外,选择正确的软件开发工具集还可以使升级更加容易和快捷。 许多PIC的基础内存体系结构是哈佛体系结构,该体系结构广泛应用于英特尔8051单片机中。哈佛结构具有一个用于存储程序命令的存储空间,并为运行内存额外分配空间,单独的存储空间(可以是片上闪存,ROM,RAM或外部芯片)通常可以提高程序执行速度。 在对单片机方案开发之前,我们必须明确将要用于设计的PIC单片机。其中,8位PIC是一个不错的选择,因为它们的成本通常低于16位和32位MCU,并具有足够的外设集(例如A/D转
[单片机]
基于AT89S51单片机的PWM专用信号发生器的设计
1 引言 涡流无损检测作为无损检测应用最广泛的方法之一,具有传感器结构简单、灵敏度高、测量范围大、不受油污等介质影响、抗干扰能力强等优点,已被广泛应用于冶金、机械、化工、航空等多个工业部门。然而由于受趋肤效应的影响,常被限制在对导体表面及亚表面层的检测上,这使其检测应用范围受到了很大的限制。但是,若检测线圈在脉冲激励作用下,因脉冲信号中含有丰富、连续的频率成分,所以检测线圈中所得到的信息不仅包含了被检测 试件的表面、亚表面信息,还包含其深度信息,能够对材质以及缺陷进行定量评价。而脉冲信号的波形、频率、幅值、占空比等参数的改变对检测结果有着不同的影响。因此为了获得不同的脉冲激励下的检测结果。特制作了这一专用高精度
[单片机]
单片机C语言程序设计:ADC0809数模转换与显示
ADC0809 数模转换与显示c语言程序 /*名称:ADC0809数模转换与显示 说明:ADC0809采样通道3输入的 模拟量,转换后的结果显示在数码管上。 */ #include《reg51.h》 #defineucharunsignedchar #defineuintunsignedint //各数字的数码管段码(共阴) ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbitCLK=P1^3;//时钟信号 sbitST=P1^2;//启动信号 sbitEOC=P1^1;//转换结束
[嵌入式]
51单片机是冯诺依曼结构还是哈佛结构?
简介:有人说51地址线复用,就是冯诺依曼结构。很多入门的书上基本上都说:由运算器、控制器、存储器、输入设备、输出设备组成的系统 都叫冯氏结构。 也有的说:“程序存储器的数据线地址线”与“数据存储器的数据线地址线”共用的话,就 是冯氏结构,所以51是该结构。 关于这个问题,有人说51地址线复用,就是冯诺依曼结构。很多入门的书上基本上都说:由运算器、控制器、存储器、输入设备、输出设备组成的系统 都叫冯氏结构。 也有的说:“程序存储器的数据线地址线”与“数据存储器的数据线地址线”共用的话,就 是冯氏结构,所以51是该结构。(我认为说得太绝对了) 我认为冯氏结构与哈佛结构的区别应该在存储器的空间分别上,哈佛结构的数据区和代码区是分开的
[单片机]
单片机实现无线呼叫系统设计
随着科技的进步以及生活质量的不断提高,产生了各种不同类型的呼叫系统。传统的 呼叫系统 多是有线的,比如采用分布控制方式的单片机系统,主机和呼叫器的应答通过一根三芯导线,包括电源线、信号线、地线来完成,各呼叫器并行挂接。这样的系统存在着布线繁琐,安装麻烦、成本高等问题,针对这些问题,无线呼叫系统逐渐发展起来,越来越多的研究者将目光投向了无线领域。 1 系统设计方案 低功耗无线呼叫系统的发送和接收模块的框图如图1,图2所示。 其中图1为无线发送模块,以STC89C52RC为主控制核心,及时响应终端的呼叫信息,然后利用nRF905无线传输模块将呼叫信息发送给无线接收模块进行处理。 图2为无
[单片机]