求51单片机c语言编程,要求我每按一下按钮A显示器上的数就加1,按一下按钮B显示器清零。要求c语言程序!

作者&投稿:甫剑 (若有异议请与网页底部的电邮联系)
51单片机编程开关每按一次,显示器显示的内容就加1~

单片机设计是个系统工程,包括硬件设计(含键盘,显示,外存储等)和软件设计,不是几句话就能说清的

程序清单如下:
#include // 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单片机

if(A==0) //A 按下后让连接数码管的端口显示1
{
P0=XXXX;
}

if(B==0) //B按下后让数码管不显示
{
p0=XXXX;
}


51单片机,c语言编程 一个按键控制6盏灯 第一下所有灯灭(不管灯亮灭...
include<reg51.h>#define u16 unsigned int#define u8 unsigned charsbit key=P2^0;u8 count=0;u8 sk(){static u8 ms;if(key==0){if(ms<10)ms++;if(ms==5){return 0;}}return 1;}void main()\/\/主函数{while(1){if(sk()==0){count++;switch(count){case 1:P1=0xff;break;...

用C语言编程,使51单片机数码管从0显示到60
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};\/ 功 能:延时,若干毫秒 参 数:毫秒数 返回值:无 \/ void DelayMs(unsigned int i)\/\/一个延时函数,这个函数在11.0592M晶振下的...

求一个用C语言编写的51单片机音乐程序代码。
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, \/\/1,2,3,4,5,6,7,8,i 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};void delay(unsigned char t){ unsigned char t1;unsigned long t2;for(t1=0;t1<t;t1++){ for(t2=0;t2<8000;t2++){ ...

关于51单片机C语言编程的问题
你定义P1_0 程序里却用P1_1 当然要报错:P1_1未定义 P1^0  P1^1... 这些符号是在头文件 reg52.h 中定义过的,它与单片机内部寄存器的地址已经联系上了 但P1.0或P1_0是我们习惯的写法,编译器并不认识 所以 我们写sbit P1_1=P1^1 ,意思是定义一个位变量P1_1 和已有位变量P1^1...

51单片机串口通信c语言编程
sinti(); \/\/串口初始化程序 ring=1;while(1){ while (1){ if(CASE1==0){ send('a');ring=0;break;} if(CASE2==0){ send('b');ring=0;break;} if(CASE3==0){ send('c');ring=0;break;} if(CASE4==0){ send('d');ring=0;break;} } if(ring==0){ ...

51单片机用c语言编程实现1s定时、1khz方波、512hz方波输出,麻烦多在...
Include<reg51.h> define uchar unsigned cahr uchar times=0,sec=0;sbit p512=P1^0;sbit p1k=P1^1;void t0isr() interrupt 1 { times++;if((times%4)==0)p512=~p512;if((times%2)==0)p1k=~p1k;if(times>=205){times=0;sec++} } main(){ TMOD=0x02;TH0=256-244;TL0=...

如何用51单片机做计算器(要求用C语言编程) 由于是新手所以没积分 对 ...
给你参考一下的,我最近做的:我的实验板上的键不够,所以只能做加法运算,而且两数之和不能大于十。嘿嘿,没错这个给某种人用的。\/\/*** myh.h ***有两个文件,一个是头文件myh.h一个是js.c include <reg52.h> typedef unsigned char uchar;typedef unsigned int uint;typedef bit BOOL...

请高手具体解释一下以下51单片机C语言程序:
void timer() interrupt 1 using 2\/\/定时器0中断函数,interrupt 1是T0的中断入口 { Flag_Delay5ms=0;\/\/将 延时5ms 标志位 置为 0,表示5ms结束 TH0=-5000\/256;\/\/为T0高8位赋初值,相当于TH0=(65536-5000)\/256;可以推出晶振为12MHz TL0=-5000%256;\/\/为T0低8位赋初值,同上 } \/*延时...

51单片机C语言编程如何实现长按按键实现数值的累加
这个可以用定时器来做,比如检查某键,按键时间超过2秒后一个变量开始累加知道键释放为止。实现方法如下:include<reg51.h> define uint unsigned int define uchar unsigned char uint v=0,time=0;sbit key=P1^0;void t0isr() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;ti...

51单片机中如何用C语言自定义一个寄存器,求大神帮忙
寄存器是CPU内部重要的数据存储资源,主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间,也就是说CPU操作寄存器比操作内存快(寄存器是直接存取,而内存是寻址存取)。汇编比C语言效率高,经常操作寄存器也是一个原因吧。C语言可以把变量定义为寄存器类型的,将数据直接...

双台子区18382511106: 求51单片机c语言编程,要求我每按一下按钮A显示器上的数就加1,按一下按钮B显示器清零.要求c语言程序! -
晏要脑血: if(A==0) //A 按下后让连接数码管的端口显示1 { P0=XXXX; } if(B==0) //B按下后让数码管不显示 { p0=XXXX; }

双台子区18382511106: 单片机,C语言程序.要求每按一次按键数码管按以下图循环交替
晏要脑血: 关于这个问题,只能给你思路,不能给你程序呀,因为编译环境是不一样的,思路如下:当检测到按键按下时:首先I&#47;O口输出给数码管第一种状态,延时1s:I&#47;O口输出给数码管第二种状态,延时1s:I&#47;O口输出给数码管第三种状态,延时1s:I&#47;O口输出给数码管第四种状态,延时1s:未上面的语句加上死循环.

双台子区18382511106: 求用单片机编程序 是用c语言编的题目是 当key1每按一次,led闪10次后报警 -
晏要脑血: 找一个读按键的程序, 然后 while (**)判断按键 {计数器加1;灯闪;判断是否是9{是清零报警(基本延时多久后,再关掉报警)}延时20ms判断 按键松开 //这里是死循环在这,除非你要求可以连续读按键 }自己找程序去,编完了给你 ,你以后还是不会

双台子区18382511106: 求51单片机C语言程序编程思路 -
晏要脑血: 展开全部#include //假定继电器是安装在P3.5,按键分别安装在P3.6, P3.7,时钟频率12MHz sbit sw1=P3^6; sbit sw2=P3^7; sbit relay=P3^5; void SetupTimer0() { TMOD &= 0XF0; //仅保留T1信息 TMOD |= 0X02; //设置T0: 定时功能,方式2,...

双台子区18382511106: 急求51单片机计数器的C程序!!! -
晏要脑血: #include "reg51.h" unsigned char time; void main() { EX0=1; //开外部中断 IT0=1;//设置边沿触发 EA=1; //开放全局中断 while(1) { P0=~time; // 通过P0口的LED显示出计数值(二进制形式) } } void INT_0() interrupt 0 { while(INT0==0); time++;//每按下一次计数加1.}

双台子区18382511106: 急求!!怎样用C语言实现51单片机中3*4矩阵键盘每按下一个键,就在LCD1602上显示一个“*”号. -
晏要脑血: 不能合并?那你写的按键程序和LCD程序有什么用,LCD部分需要有个函数,这个函数负责在液晶屏的任意位置显示想要显示的字符;按键部分需要一个进行按键扫描程序,合并的话,主程序不断进行按键扫描,当检查到有键按下时,就调用LCD那个函数

双台子区18382511106: 急求一个51单片机c语言程序
晏要脑血: #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit wela=P3^1; sbit dula=P3^2; uchar code tabledu[]={0x77,0x7c,0x39,0x5e,0x79,0x71,0x6f}; uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; uchar tt=0,numdu,numwe; void init() ...

双台子区18382511106: 如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程... -
晏要脑血: 给你个基本框架,根据你的具体要求再修改吧.使用定时1中断实现,精度比较高.#include <reg52.h>#define PERIODH (65536l-10000l)/0X100 //设10ms中断1次TH1初值#define PERIODL (65536l-10000l)%0X100 //设10ms中断1次TL1初值 sbit...

双台子区18382511106: c51单片机中,每条c语言需要的时间是多少啊,是一个机器周期还是时钟周期!谢谢啦! -
晏要脑血: 你说的是指令周期,根据指令的不同,一般一个指令需要1-4个机器周期来完成(比如乘法或除法就需要48个时钟周期来完成),一般的51单片机都是12分频,也就是说1个机器周期分为12个时钟周期.请你好好理解时钟周期--机器周期--指令周期三者之间的关系. 目前STC有不少型号的单片机有单时钟周期指令,一个时钟周期即为一个机器周期,不进行12分频,就是在1个时钟周期内可以执行一条指令,但只是部分指令可以单时钟周期执行,大多指令需要1-6个时钟周期来完成,相比较而言,已经比普通的12分频单片机速度快多了.

双台子区18382511106: 单片机程序:按一下开关,led灯立即点亮10秒,以后每过1分钟灯点亮10秒.汇编和C语言都行 -
晏要脑血: #include<reg52.h> unsigned long t0count=239999; unsigned int t1count=0; sbit led=P2^0; void main() { TH0=0x06; TL0=0xff; TH1=0x06; TL1=0x06; TMOD=0x22; P2=0x00; TR0=1; ET0=1; ET1=1; EA=1; while(1); } void time0_int() interrupt 1 { t0...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网