编写一个完整的单片机C51程序

编写一个完整的单片机C51程序,第1张

#include<reg51.h>

sbit led=P1^0 //单拿悄片机管脚位声明

void main()

{

TMOD=0x01 //定时器TO工作在方式1

TH0=(65536-5000)/256 /橘敏猜/装初值,12M晶振 1为1us 5000为5000us=5ms;

TL0=(65536-5000)%256

EA =1 //开总中断

ET0=1 //开定时器TO中断

TR0=1 //启动定时器圆型

P1=0 //初始化P1口

while(1) //程序在这里等待中断发生

}

void T0_time() interrupt 1

{

unsigned char num

TH0=(65536-5000)/256

TL0=(65536-5000)%256

num++

if(num==100)//0.5S (1s闪烁1次==0.5S亮0.5S灭)

{

num=0

led=~led //led状态取反

}

}

#include<reg51.h>

#define uchar unsigned char

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}  //0到山搜早9

uchar num,cnt,disn

uchar keyval,disk

uchar led[]={1,2,3,4}

void dealdat(uchar a)

{

led[0]=0

led[1]=0

led[2]=0

led[3]=0

led[a]=disk

}

void delay(unsigned int a)

{

unsigned int i,j

for(i=0i<ai++)

for(j=0j<1000j++)

}

void t0isr() interrupt 1

{

TH0=(65536-5000)/256

TL0=(65536-5000)%256

switch(num)

{

case 0:P2=0x01break

case 1:P2=0x02break

case 2:P2=0x04break

case 3:P2=0x08break

default:break

}

P0=~tab[led[num]]

num++

num&=0x03

cnt++

if(cnt>100)

{

cnt=0

disn++

disn%=4

dealdat(disn)

}

}

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

return((~sccode)+(~recode))

 }

        else

sccode=(sccode<<1)|0x01

}

}

}

return 0  //无键按下,返回0

}

void getkey(void)

{

unsigned char key

key=kbscan()

if(key==0){keyval=0xffreturn}

switch(key)

{

case 0x11:keyval=7break

case 0x12:keyval=4break

case 0x14:keyval=1break

case 0x18:keyval=10break

case 0x21:keyval=8break

case 0x22:keyval=5break

case 0x24:keyval=2break

case 0x28:keyval=0break

case 漏扒0x41:keyval=9break

case 0x42:keyval=6break

case 0x44:keyval=3break

case 0x48:keyval=11break

case 0x81:keyval=12break

case 0x82:keyval=13break

case 0x84:keyval=14break

case 逗雀0x88:keyval=15break

default:keyval=0xffbreak

}

}

main()

{

TMOD=0x11

TH0=(65536-5000)/256

TL0=(65536-5000)%256

TR0=1

ET0=1

EA=1

while(1)

{

getkey()

if(keyval!=0xff)disk=keyval

delay(10)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12440619.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存