51单片机程序c语言的

作者&投稿:荤闵 (若有异议请与网页底部的电邮联系)
51单片机编程,用C语言。~

给你一个矩阵键盘的参考程序
行列扫描:通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。
/****************************************************************************
*函数名
:KeyDown
*函数功能
:
检测有按键按下并读取键值
*输入
:

*输出
:

****************************************************************************/
voidKeyDown(void)
{
char
a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//读取按键是否按下
{
Delay10ms();//延时10ms进行消抖
if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
{
GPIO_KEY=0X0F;
//测试列
switch(GPIO_KEY)
{
case(0X07):
KeyValue=0;break;
case(0X0b):
KeyValue=1;break;
case(0X0d):
KeyValue=2;break;
case(0X0e):
KeyValue=3;break;
}
//测试行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70):
KeyValue=KeyValue;break;
case(0Xb0):
KeyValue=KeyValue+4;break;
case(0Xd0):
KeyValue=KeyValue+8;break;
case(0Xe0):
KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0))//按键松手检测
{
Delay10ms();
a++;
}
}
}
}

#include
#include
#define uchar unsigned char
#define uint unsigned int

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00};
uchar led[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x00,0xFF};
sbit adrd=P3^7;
sbit adwr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;

uchar date1=0;
uchar date2=50;
uchar date3=100;
uchar date4=150;
uchar date5=200;
uchar date6=255;

uchar a,sz;

void init();
void delay(uint z);
uchar adchushihua();
void shumaguan(uint shu);
void processing();
void main()
{
init();

while(1)
{

sz=adchushihua();
for(a=10;a>0;a--)
{
shumaguan(sz);
processing();
}
}
}

void init()
{

P0=0x7f;

}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

uchar adchushihua()
{
uchar shuzhi;
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;

P1=0xff;

adrd=1;
_nop_();
adrd=0;
_nop_();
shuzhi=P1;
adrd=1;

return shuzhi;
}
void shumaguan(uint shu)
{
uchar bai,shi,ge;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;

dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(5);

dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(5);

dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delay(5);

}

void processing()
{
if((sz>=date1)&&(sz<=date2))
{
P1=0xfe;
}
else if((sz>=date2)&&(sz<=date3))
{
P1=0xfd;
}
else if((sz>=date3)&&(sz<=date4))
{
P1=0xfb;
}
else if((sz>=date4)&&(sz<=date5))
{
P1=0xf7;
}
else if((sz>=date5)&&(sz<date6))
{
P1=0xef;
}
else if(sz==date6)
{
P1=~P1;
delay(20);

}

}

这个是我刚刚写的 根据你的需要 反正闲来无事 我写的比较笼统 需要你自己根据 自己的实际情况来判断确定 我只是利用AD简单的处理 成数码管显示的数字 你要是 转换成电压 那就把里面的变量 修改一下 我写的那个控制LED灯亮就不要动了 只是修改一下他前面定义的数字就可以 最后那个是我自己加上去的有点趣味性 希望对你有帮助

#include<reg52.h>
sbit key_1 = P3^7;//按键对应这个口
sbit count = P3^3;//外部中断触发端口是这个
unsigned int i,z;
char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯对应这个的位操作
void delay(uint);
void main()
{EA=1;EX1=1;IT1=0;while(1){
count = key_1;
P2 = table[i];}
}

void int1_int()interrupt 2
{
i++;//按一次键,i加一次,数组对应的位数变化一次,
if(i >= 8)i =0;
}
void delay(z)
{
unsigned int x,y;
for(x = z;x>0;x--)
for(y = 110;y>0;y--);
}

中断的例子STC的下载工具中就有,新版的。。。。


如何将单片机程序编译为c语言源代码?
1、首先在电脑桌面中,双击“Keil4”图标打开软件。2、点击上部菜单栏中的“工程”,在下拉菜单中选择“新建工程文件”。3、把工程文件保存到目标文件夹里去,工程文件命名可以随意写入一些数字。4、选择单片机类型,根据实际情况进行选择,例如“Atmel”中的“89C52”。5、点击“文件”,在“文件”的下拉...

一个完整的单片机c语言程序包含哪几个部分?
个人觉得,一个完整C程序至少应该包含头文件、初始化、主程序四个部分,头文件是程序编译预处理的重要组成部分,缺了它就无法生成目标代码;初始化部分包含变量初始化和端口初始化;主程序是一个C程序的核心代码,由此执行或调用一些具有特定功能的函数模块以完成程序的预设功能。

求:如何将C语言程序弄进51单片机?
C语言是人能用的文字语言,单片机只能用由0和1组成的机器语言,要想单片机运行C语言,拢共要三步:1)写C语言程序。2)用编译软件编译C程序并生成hex代码。3)用下载线或烧录器将hex代码写入单片机。

单片机编程语言一般有哪几种
2.单片机的C语言 单片机的C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言具有功能丰富的库函数,运算谏磨快,编译效率高,有良好的可移植性,而且可以实现直接对系统硬件的控制。此外,C语言程序具有完整的程序模块结构,从而为软件开发中栗用模块化程序设计方法...

请问单片机的C语言怎么编写啊?
单片机C语言编译错误:requires ANSI-style prototype,是编译过程错误造成的,解决方法如下:1、编程前保存文件,单击文件菜单,下拉菜单中选择保存按钮。2、输入文件名,文件类型选择为.c类型。3、然后开编辑,首先,定义头文件,头文件一般为stdio.h。4、接着,定义主函数,主函数名为main。5、然后,...

单片机C语言一程序问题
DataPort=dofly_DuanMa[i];就说这里吧 第一次i=0,因为松手检测 后面的i++了 当你按键放开了后 你的i假设++到了5 那么这里就是DataPort=dofly_DuanMa[5];但是这是随机的 因为谁也不知道你什么时候松手 你不松手 那么i就一直++ 然后到8 变为零 说白了 就是你的松手检测和显示没做...

51单片机C语言程序中延时函数delay的原理是什么?
原理:只是执行一些所谓的“无实际意义的指令”,如缩放或执行一个int自加,简单地说,就像高中数学中的“乘法原理”一样,很容易迅速增加上面提到的“无意义指令”的数量 关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大...

c51单片机c语言交通灯的程序
void delay(int ms);\/\/延时子程序 void key();\/\/按键扫描子程序 void key_to1();\/\/键处理子程序 void key_to2();void key_to3();void display();\/\/显示子程序 void logo(); \/\/开机LOGO void Buzzer();\/\/主程序 void main(){ TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET0=1;...

编写简单的单片机c语言程序 1、指定数组找最大值 2、排序
max=ar[0];\/\/假定第一个数为最大值 min=ar[0];\/\/同时假定也第一个数为最大值 \/*从第二个数开始比较查找最值*\/ for(i=1;i<NR;i++){ if(ar[i]>max)\/\/最大值 { max=ar[i];} if(ar[i]<min)\/\/最小值,不能使用elseif,否则会跳过比较 { min=ar[i];} } fprintf(stdout...

C语言与单片机C语言的区别 急求
1、单片机中C的语法一般都对ANSIC有些扩展,及一些特殊写法如C51扩展的dataxdatabitsbit一类的,还有一些中断程序写法voidint()interrput1一类的。2、C是一门语言,由对应平台的编译器编译成对应平台汇编的程序,各平台的汇编不一样,当然编译器也不一样DOS上的TC2TC3 WINDOWS上的VC8051的C51都有自已的...

霍城县15642106844: 急求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.}

霍城县15642106844: 一道51单片机的C语言程序,关于串口通讯的,很简单...... -
溥奚联环: #include<reg52.h> //增强型52寄存器的定义 #define uchar unsigned char //用uchar代替unsigned char #define uint unsigned int //用uint代替unsigned int unsigned char flag,a,i; //定义变量flag,a,i uchar code table[]="I receive,thanks"; //定义一个...

霍城县15642106844: 基于51单片机的c语言程序 -
溥奚联环: #include <reg51.h> void delayms(unsigned char ms) { unsigned int i; i=1200; while(ms--) { while(i--) ; } } void main() { if(KEY1) LED1=1; else LED1=0;// if(!KEY2) { delayms(10); if(!KEY2) { LED2=!LED2; } while(!KEY2 ) ; } }

霍城县15642106844: 求一个51单片机简单的中断C语言程序 -
溥奚联环: #include<reg52.h> //头文件 #define uint unsigned int //宏定义,如果你不嫌麻烦可以直接省略 #define uchar unsigned char void delay(uint); //字程序声明 sbit D1=P1^0 ; //位定义 第一盏灯 sbit D2=P1^1 ; //第二盏,同上 sbit D3=P1^2 ; // 3 sbit ...

霍城县15642106844: 急求一个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() ...

霍城县15642106844: 帮忙用C语言写一段51单片机的程序,晶振12M. -
溥奚联环: #include <reg52.h>/* 本程序功能,输出方波,频率1-25ms 单片机@12MHz /12T*/ sbit Pulse=P1^1; //---方波 sbit Add=P3^2; //---频率加 sbit Dec=P3^3; //---频率减 sbit Start = P1^3; //---开关键 sbit Display_Ten_Bit = P2^0; sbit Display_Bit_Bit...

霍城县15642106844: 求写一段简单的51单片机C语言代码 -
溥奚联环: 单片机检测高电平.1、可以用外部中断,外接激光传感器最好用普通光耦隔离一下,顺便改成低电平触发单片机中断.然后用位移指令移动跑马灯,然后计数值加1. 2、可以用循环检测,也建议用光耦隔离先,在MAIN里面不断检测P00,发现变化后,再次检测以便确认,确认后同样位移一下跑马灯,然后计数加1.

霍城县15642106844: 求解 51单片机C语言程序 -
溥奚联环: void int1() interrupt 0 //这里是0,因为你好像用的是外部中断0,而不是定时器中断0 { KEY1=1; P0 = table1[10];Delay(10); }

霍城县15642106844: 51单片机产生随机数c程序 -
溥奚联环: 刚写的程序,我的思想是用定时器加rand()随机函数来实现的,单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的.然后是0到9不重复的随机数,程序中用了循环来判断是否和...

霍城县15642106844: 51单片机中断程序C语言举例 -
溥奚联环: /****************************************************/ /*说明:多故障显示监控电路 */ /*硬件:AT89S52@12MHz */ /* P1控制输入与输出,或非门4002进行逻辑判断, */ /* 产生中断脉冲. */ /*作者:xxx */ /*时间:2011-08-19 */ /*备注:4个故障输入端X1-...

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