è¿ä¸ªå¾å¥½å¤çåï¼æ¯å¦ä»¥ä¸ä¸¾ä¾ï¼ç¬ç«+ç©éµï¼å®ç°ç¬ç«æé®ç¸å½äºç±»ä¼¼SHIFTä½ç¨çææã
#include<reg51.h>
#define uchar unsigned char
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0å°f
uchar keyval,num;
sbit skey=P1^0; //ç¬ç«é®P1.0
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<125;j++);
}
uchar kbscan(void) //ç©éµé®æ«æç¨åº
{
unsigned char sccode,recode;
P3=0x0f; //å0æ«æ,å线è¾å
¥
if ((P3 & 0x0f) != 0x0f) //æé®æä¸
{
delay(20); //延æ¶å»æå¨
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef; //éè¡æ«æåå¼
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//çå¾
é®æ¬èµ·
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //æ é®æä¸ï¼è¿å0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0)
{
return;
}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
//以ä¸å¤çç¬ç«æé®
if(skey==0)
{
if(keyval!=0xff)keyval+=16; //å¦æç¬ç«é®æä¸ï¼é®å¼å 16
while(skey==0); //çå¾
ç¬ç«é®éæ¾
}
}
void t0isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
switch(num)
{
case 0:P2=0x01;break;
case 1:P2=0x02;break;
case 2:P2=0x04;break;
case 3:P2=0x08;break;
default:break;
}
if(keyval<16) P0=~tab[keyval]; //ç¬ç«é®æªææ£å¸¸æ¾ç¤º
else P0=~(tab[keyval]|0x80); //ç¬ç«é®æä¸æ¾ç¤º+DP
num++;
num&=0x03;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
}
}
温馨提示:内容为网友见解,仅供参考
这个单片机程序该怎么用c语言写 说说每一步是干什么的 谢谢
这个很好处理呀,比如以下举例,独立+矩阵,实现独立按键相当于类似SHIFT作用的效果。include<reg51.h> define uchar unsigned char uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; \/\/0到f uchar keyval,num;sbit skey=P1^0; ...
C语言控制单片机的详细原理是怎样的?
所谓的单片机C语言的意思是拿C语言来编写单片机程序,没有什么C语言控制单片机这回说法。具体过程是:C语言源程序通过特定的C编译器编译为针对某种单片机的汇编代码,再由汇编器将汇编代码汇编为单片机可执行的机器代码,然后下载到单片机的存储器运行。当前一般的集成开发环境(如Keil C)可以一次搞定生成机器...
求单片机程序(C语言),新手不会写
1、 在开机状态下,K1没有检测到物体(没有触发),K2没有检测到物体,K4没有检测到物体,Y0为高电平,Y1为高电平。2、 K1没有检测到物体为高电平,K2没有检测到物体为低电平,K4检测到物体为低电平。Y0为高电平,Y1为低电平 3、 K1检测到物体(触发)为低电平,K2没有检测到物体为低电平,K4...
怎么用c语言编程51单片机读写程序?
ORG 0000H MOV DPTR,#1000H ;给源数据块地址指针DPTR赋初值 MOV P2, #20H ;给目的数据块地址指针P2和R0赋初值 MOV RO,#00H LOOP: MOVX A, @DPTR .MOVX @RO, A .INC DPTR INC RO CJNE RO,#64H, LOOP SJMP
谁能帮我写一下单片机C语言程序?
sbit K1=P1^1;sbit K2=P1^2;void delay(int ms){ unsigned char i;while(ms--)for(i=0;i<120;i++);} void t0isr(void) interrupt 1 { TH0=(65536-10000)\/256;TL0=(65536-10000)%256;LED=~LED;} main(){ TMOD=0x01;TH0=(65536-10000)\/256;TL0=(65536-10000)%256;ET0=1;E...
单片机c语言程序
TF0==1,那么while的条件为真,要一直执行循环,但是while后面没有跟循环,只有一个分号,所以程序死在这里,就是一直等待,等到什么时候呢?直到TF==1,也就是!TF0==0,跳出循环。接下来我们首先要做的就是清零标志位,以便于下次使用定时器的时候检查这个标志位,所以 TF0 = 0; \/\/清定时器溢...
请问单片机的C语言怎么编写啊?
单片机C语言编译错误:requires ANSI-style prototype,是编译过程错误造成的,解决方法如下:1、编程前保存文件,单击文件菜单,下拉菜单中选择保存按钮。2、输入文件名,文件类型选择为.c类型。3、然后开编辑,首先,定义头文件,头文件一般为stdio.h。4、接着,定义主函数,主函数名为main。5、然后,...
单片机 用C语言怎么编程!
每一种单片机都有一套自己的C编译器,你可以直接用,也可以挂载到其他的编译环境中 比如 Wave6000 等 51系列的 推荐用keilV8 Microchip系列的推荐用HT-PICC 编译环境用MPLAB 然后编程代码部分你写好之后,编译,此时会生成一些文件,如*.hex ,*.bin ……然后把.hex 文件 利用烧写器烧写到单片机里面 ...
c51单片机c语言交通灯的程序
接下来,我将详细解释如何为C51单片机使用C语言编写交通灯控制程序。首先,我们需要了解C51单片机的基本结构和资源,包括其I\/O端口、定时器\/计数器等。通常,交通灯系统需要控制红、黄、绿三种颜色的灯的亮灭,每种颜色的灯对应一个I\/O端口。此外,我们还需要使用定时器来设置交通灯的切换时间。在编写...
"如何使用PIC单片机C语言编译器进行程序开发与调试?"
开始学习PIC单片机C程序设计实践,首先了解一下基础:第1章:C语言简介 1.1 程序与计算机架构:计算机通过执行指令来完成任务,程序是指令的集合。1.2 数字系统:理解二进制和十六进制,为C语言操作提供基础。1.3 C语言介绍:C语言起源于汇编语言,具有高效、灵活等特点。第2章 PIC单片机基础:PIC概述 ...