51单片机中,用八个开关控制一个7段数码管,按一个开关显示一个数,用C语言怎么编程

如题所述

sfr key=P1;//定义八个开关接单片机的p1口的八个引脚,
int suma[9]={0x3B,0x4D,,,};//根据数码管的驱动芯片接入单片机接口,查表输出要显示的数字,其中第九个为不显示即清空显示。
unsigned char Scankey()
{
int i,j;
i=key;
if(key!=0xFF)
{
keyflg=1;
switch(~key)
{
case 0x01: case 0x02: case 0x04: case 0x08:case 0x10:case 0x20: case 0x40:
case 0x80:return (~key);
default: keyflg=0;return (0xFF);
}
}
return(key);
}
void delay( long i) // 延时
{
while(i--);
}
void xianshi(unsigned char a)
{
P2=suma[a];
}
void inti(){;;xianshi(9);}
int main( )
{
unsigned char a,b;
inti(); // 单片机初始化
b =Scankey();
while(1)
{
a=Scankey(); // 扫描按键
if(keyflg) // 判断有键按下
{
if(a!=b) // 判断是否按键有改变
{
xianshi(9); // 关闭数码管
delay(1000); // 延时
xianshi(a); // 显示要显示的数码管
}
b=a; // 保存当前的按键值。
}
delay(1000); // 延时 自己调试要大于200 ms
}
}
// 只能给你个大概的思路了。,一般扫描按键,除非硬件使用中断的引脚可以中断设计,返回键值,或查值,判断是否显示,显示输出,中间要加些延时效果更好。
// 设计到单片机就牵扯到硬件的定义,还有些外界干扰的情况要根据实际情况在完善程序。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-13

一个简单的仿真实例,供参考

追问

程序?

追答

解压缩里面有程序。

第2个回答  2013-11-15
我的空间有抢答器的设计,包括了题目要求的功能。

求51单片机的C程序,就是键盘控制这个一位七段数码管,按键按1按下数码管...
int key1,key,disbuf;\/\/ 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};unsigned char ledx[8];bit s0,s1;void delay(uchar z...

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

用c语言循环语句怎么写一个51单片机的时钟啊,用8个数码管显示时间。
delay(50);dischg();delay(80);break;

共阴极7段数码管显示C程序
单片机7段数码管动态显示程序代码及其说明如下:include <reg51.h> include <intrins.h> include<math.h> unsigned char data dis_digit; \/\/dis_digit---位选通值, 传送到P2口用于选通当 \/\/前数码管的数值, 如等于0xfe时,选通P2.0口数码管 unsigned char code dis_code[11]={0xc0,0xf9,...

51单片机设计,求用一个按键能显示一个七段数码管1~7的c语言程序。
include<reg51.h> define uchar unsigned char uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};sbit key=P1^0;main(){ uchar i,key;i=1;while(1){ P1=table[i];if(key==0){ while(key==0);i++;if(i>7)i=1;} } } ...

在51单片机中用c语言写程序实现用一个按键控制8个灯的亮和灭(按下按 ...
如果你会C语言的话,很容易上手。自己先从控制1个数码管学,在控制2个数码管(2个数码管基本上可以完成上面试验,8个就可以类推)\\r\\n\\r\\n1、初始值为0:上电复位后,单片机驱动数码管显示0.(如果不会,百度里搜51控制数码管等关键字,特别多试验电路和程序。)\\r\\n2、按第一个键:原理就是按键...

AT89C51单片机用8位7段显示管显示160530 求大佬帮忙给个c语言的程序
include<reg51.h>#define uchar unsigned charuchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};\/\/0-9uchar scanled;void t1isr() interrupt 3 \/\/显示{ TH1=(65536-5000)\/256; TL1=(65536-5000)%256; switch(scanled) { case 0: P2=0x01; P0...

51单片机的共阴数码管怎么显示数字(c语言)
要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。以显示数字“0”为例,c语言程序如下:include<reg52.h> define uchar unsigned char define uint unsigned int \/\/数码管的段码编码 Uchar table[10] ={0x3f,0x06,...

51单片机,8个数码管循环显示1-9的C语言程序。
假设8个数码管公共端均接地,同时显示1-9\\x0d\\x0a#include\\x0d\\x0a#include\\x0d\\x0a#defineucharunsignedchar\\x0d\\x0a#defineuintunsignedint\\x0d\\x0aucharcodeDSY_CODE[]=\\x0d\\x0a{\\x0d\\x0a0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff\\x0d\\x0a}...

用C语言如何开51单片机的计数器,最好编个实例程序
void main(){ uint k;TMOD=0X50;\/\/设置模式为1,计数模式 TH1=0X00;TL1=0X00;\/\/初始值设定 IE=0X00;\/\/关全局中断 TR1=1;\/\/开定时计数器1运行 while(1){ if(TL1==16)\/\/进行判断,为16时,计数值归零 TL1=0X00;k=TL1;P0=LED7Code[k];\/\/数码管进行显示 } } 此程序目的见http:\/...

相似回答