设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。

利用51单片机、1个按键及1个数码管等器件,求程序和图, 谢谢,这是poteus课设。

程序清单如下:

#include < reg51.h >// 51单片机头文件

#define uchar unsigned char // 宏定义,用uchar替代无符号字符型

#define uint  unsigned int // 宏定义,用uint 替代无符号整数型

sbit Key = P2 ^ 7;

uchar Count = 0; 

uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、'-'、' ' 'P'

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

};//延时N毫秒

void DelayNms( uint N ) // 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的

{

uint x,y;

for( x=N; x>0; x-- )

for( y=110; y>0; y-- );

}

//数码管显示   // 显示方式为动态扫描,视觉暂留原理

void Display( uchar Num ) // *p指向Main函数中的数组ShowNum的首地址

{

P0 = DataChar[ Num ]; // 向P0赋段码值

DelayNms(2); // 短暂的延时

P0 = 0x00; // 让数码管熄灭,否则会造成数字重叠

}

void main( void )

{

while(1)

{

if( Key == 0 )

{

DelayNms(30);

if( Key == 0 )

{

Count += 1;

Count = (Count>9)? 0 : Count;

}

while( !Key );

}

Display( Count );

}

}

扩展资料

8051单片机具有如下功能:

8位CPU·4kbytes程序存储器(ROM) (52为8K)

128bytes的数据存储器(RAM) (52有256bytes的RAM)

32条I/O口线·111条指令,大部分为单字节指令

21个专用寄存器

2个可编程定时/计数器·5个中断源,2个优先级(52有6个)

一个全双工串行通信口

外部数据存储器寻址空间为64kB

外部程序存储器寻址空间为64kB

逻辑操作位寻址功能·双列直插40PinDIP封装

单一+5V电源供电

CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

ROM:用以存放程序、一些原始数据和表格;

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;

一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。

参考资料来源:百度百科-51单片机

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-11

#include < reg52.h >   // 嵌入51单片机头文件


#define uchar unsigned char // 宏定义,用uchar替代无符号字符型

#define uint  unsigned int // 宏定义,用uint 替代无符号整数型


sbit Key = P2 ^ 7;

uchar Count = 0; 

uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、'-'、' ' 'P'

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

};

//延时N毫秒

void DelayNms( uint N ) // 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的

{

uint x,y;

for( x=N; x>0; x-- )

for( y=110; y>0; y-- );

}


//数码管显示   // 显示方式为动态扫描,视觉暂留原理

void Display( uchar Num ) // *p指向Main函数中的数组ShowNum的首地址

{

P0 = DataChar[ Num ]; // 向P0赋段码值

DelayNms(2); // 短暂的延时

P0 = 0x00; // 让数码管熄灭,否则会造成数字重叠

}


void main( void )

{

while(1)

{

if( Key == 0 )

{

DelayNms(30);

if( Key == 0 )

{

Count += 1;

Count = (Count>9)? 0 : Count;

}

while( !Key );

}

Display( Count );

}

}

本回答被提问者采纳

设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码...
ROM:用以存放程序、一些原始数据和表格; I\/O口:四个8位并行I\/O口,既可用作输入,也可用作输出 T\/C:两个定时\/记数器,既可以工作在定时模式,也可以工作在记数模式; 五个中断源的中断控制系统; 一个全双工UART(通用异步接收发送器)的串行I\/O口,用于实现单片机之间或单片机与微机之间的串行通信; 片内振荡器...

c51单片机按键每按一次同时数码管显示数字加一是什么?
\\x0d\\x0a用外部中断,\\x0d\\x0a每中断一次,中断服务程序将数组元素加一P0=Shuzu[ax++](或指针加一:P0=*P++)\\x0d\\x0a以上假设P0口驱动数码管!\\x0d\\x0a至于数码管使用的是共阳还是共阴,就把相对的数值存在数组中!\\x0d\\x0a-\\x0d\\x0a外部中断0的中断程序入口\\x0d\\x0avoid TI_0() interrupt ...

51单片机设计一个程序:按键每按一次,数码管加1;当数码管加到9后又...
include<reg51.h> sbit k1=P3^3;define uint16 unsigned int define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(){ uint16 i=1000;while(i--);} void main(){ uchar n ;P2=0xfe;P1=0xff;while(1){ if...

51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示
1、首先,要把代码写好,点亮数码管。2、代码写完后,要确认原先写好的代码是不是正确的。3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。5、这里改成的是代表数字0的代码,如图所示。6、最...

c51单片机按键每按一次同时数码管显示数字加一是什么?
- 建立一个数组,用于存放 0-9的段码。int Shuzu[]={---};如果会用指针 int *P;P=Shuzu; \/\/指针指向数组!用外部中断,每中断一次,中断服务程序将数组元素加一P0=Shuzu[ax++](或指针加一:P0=*P++)以上假设P0口驱动数码管!至于数码管使用的是共阳还是共阴,就把相对的数值存在...

...管显示1 2.2 功能按键 按下K1按键,数码管显示加1,最大不超过8;_百 ...
2.1 开机自检 数码管显示1 2.2 功能按键 按下K1按键,数码管显示加1,最大不超过8; 5 按下K2按键,数码管显示减1,最小不小于1。当数码管显示2时8个发光二极管亮0.5秒,暗0.5秒,反复变化。求程序啊单片机C语言设计的万分感谢啊... 按下K2按键,数码管显示减1,最小不小于1。当数码管显示2时 8个发光二极管...

单片机C51实现按键一次数码管加1程序问题。高手进。
设计一个单片机C51程序,实现功能是,1、按KEY1只有红灯亮,KEY2只有黄灯亮,KEY3只有绿灯亮。2、开始右数码管显示0,每按KEY1一次数码管显示加1,至9后再循环。先已经编好程序,第一个实现,但第二个总弄不对。感觉问题很简单,就是差一点,高手帮我看一下。... 展开 #...

51单片机怎么用按键控制一个数码管,按一下显示一
\/*---名称:单个共阳数码管动态显示变化数字内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变---*\/#include\/\/包

用一个按钮控制一个数码管,实现按一下键数码管加一,从0到9依次循环
设计电路和代码,用数码管显示按键按下次数。要求用一个按键和一个数码管。数码管显示从0到F。再循环。

用51单片机实现每隔一秒数码管显示刷新一次,用定时器0实现定时功能。但...
TMOD=0x01;\/\/定时器0方式1 TH0=(65535-50000)\/256;\/\/定时50ms TL0=(65535-50000)%256;num=0;temp=0;TR0=1;\/\/开定时器0 P0=LED7Code[num]; \/\/不能是num++ } void main(){ system_init();\/\/参数初始化 while(1){ if(temp==20) \/\/定时1s,刷新数码管数字显示 { temp=0; \/\/...

相似回答