當前位置:首頁 » 編程語言 » 51c語言it0
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

51c語言it0

發布時間: 2022-05-07 08:27:21

A. C51單片機多機通信c語言

單片機a,b,c.a為主機,bc為從機。a上有一個外部中斷0輸入,按第一次a的兩個LED亮500ms,再按一下,b機的兩個LED燈亮500ms,第三次按下c機的兩個LED燈亮500ms,然後周而復始。兩個數碼管分別顯示0/1/2,和abc(bc由從機反饋)

/*

主從通信基本步驟:

1.主機從機初始化為方式2或者3,從機都置SM2=1,允許中斷

2.主機置TB8=1,發送從機地址

3.所有從機均接收主機發送要定址的從機地址

4.被定址的從機確認地址後,置本機SM2=0,向主機返回地址,供主機核對

5.核對無誤後,主機向被定址的從機發送命令,通知從機接受或者發送數據。

6.本次通信結束後,主從機重置SM2=1,主機可再對其他從機定址

*/

******************************************************************

主機a:

******************************************************************

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharleddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};

ucharMode;

sbitP10=P1^0;

sbitP13=P1^3;

sbitP17=P1^7;

sbitP20=P2^0;

sbitP21=P2^1;

voidUART_init()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0xd0;

ES=1;

EX0=1;

IT0=1;//INT0下跳觸發

EA=1;

TI=0;

}

voidDelayMs(intms)

{

uchari;

while(ms--)

for(i=0;i<120;i++);

}

voidputc_to_SerialPort(ucharc)

{

SBUF=c;

while(TI==0);

TI=0;

}

voidMasterControl(unsignedcharAddr,unsignedcharComd)

{

TB8=1;

putc_to_SerialPort(Addr);

DelayMs(50);

TB8=0;

putc_to_SerialPort(Comd);

DelayMs(50);

}

Ex0_int(void)interrupt0

{

P0=leddata[Mode];

P20=0;

if(Mode==0)

{

P2=leddata[10];

P10=0;

P13=0;

DelayMs(500);

P10=1;

P13=1;

//MasterControl('b','C');

//MasterControl('c','C');

}

elseif(Mode==1)

{

P10=1;

P13=1;

MasterControl('b','O');

//MasterControl('c','C');

}

elseif(Mode==2)

{

P10=1;

P13=1;

//MasterControl('b','C');

MasterControl('c','O');

}

Mode=(Mode+1)%3;

}

com_int(void)interrupt4

{

if(RI)

{

RI=0;

if(SBUF=='b')

{

P2=leddata[11];

}

if(SBUF=='c')

{

P2=leddata[12];

}

}

}

voidmain(void)

{

P0=0x00;

P1=0xff;

P2=0x00;

UART_init();

Mode=0;

while(1);

}

******************************************************************

從機b:

******************************************************************

#include<reg51.h>

#defineucharunsignedchar

ucharRecData;

sbitP10=P1^0;

sbitP13=P1^3;

voidUART_init()

{

TMOD=0x21;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0xf0;

ES=1;

PS=1;

EA=1;

}

voidDelayMs(intms)

{

uchari;

while(ms--)

for(i=0;i<120;i++);

}

voidputc_to_SerialPort(ucharc)

{

SBUF=c;

while(TI==0);

TI=0;

}

com_int(void)interrupt4

{

if(RI)

{

RecData=SBUF;

RI=0;

if(RB8==1)//地址

{

if(RecData=='b')//是自己的地址,置SM2=0,准備接受數據

{

SM2=0;

putc_to_SerialPort('b');

}

else//不是自己的地址

{

SM2=1;

}

}

if(RB8==0)//數據

{

if(RecData=='O')

{

P10=0;

P13=0;

DelayMs(500);

P10=1;

P13=1;

}

if(RecData=='C')

{

P10=1;

P13=1;

}

SM2=1;

}

}

}

voidmain(void)

{

P0=0xff;

P1=0xff;

UART_init();

while(1);

}

******************************************************************

從機c:

******************************************************************

#include<reg51.h>

#defineucharunsignedchar

ucharRecData;

sbitP10=P1^0;

sbitP13=P1^3;

voidUART_init()

{

TMOD=0x21;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SCON=0xf0;

ES=1;

PS=1;

EA=1;

}

voidDelayMs(intms)

{

uchari;

while(ms--)

for(i=0;i<120;i++);

}

voidputc_to_SerialPort(ucharc)

{

SBUF=c;

while(TI==0);

TI=0;

}

com_int(void)interrupt4

{

if(RI)

{

RecData=SBUF;

RI=0;

if(RB8==1)//地址

{

if(RecData=='c')//是自己的地址,置SM2=0,准備接受數據

{

SM2=0;

putc_to_SerialPort('c');

}

else//不是自己的地址

{

SM2=1;

}

}

if(RB8==0)//數據

{

if(RecData=='O')

{

P10=0;

P13=0;

DelayMs(500);

P10=1;

P13=1;

SM2=1;

}

if(RecData=='C')

{

P10=1;

P13=1;

SM2=1;

}

}

}

}

voidmain(void)

{

P0=0xff;

P1=0xff;

UART_init();

while(1);

}

B. 大家幫忙找一些51單片機的基本C語言程序例子,最好帶說明,謝啦

中斷控製程序:

#include <AT89X52.H>

#define uchar unsigned char
#define uint unsigned int
#define port_count P2 //P2接8LED介面
//將計數器的二進制值用8個LED顯示出來
uchar count;//計數器(存儲中斷次數)

void main(void)
{
count=0; //清零計數器
port_count=~count;//清零P2口
IT0=1; //INT0設為邊沿觸發方式�IT0=0則為電平觸發方式
EX0=1; //開INT0中斷
EA=1; //開系統中斷
while(1); //等待中斷處理

}

//INT0中斷處理函數
void int0_interrupt() interrupt 0 //INT0中斷號0
{
count++;
port_count=~count; //當達到255時,溢出,又從0開始

}

I/O控製程序:
#include <AT89X52.H>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define flowlight P2
void delay10ms()
{uchar a,b;
for(a=200;a>0;a--)
for(b=225;b>0;b--);
}
void main()
{
uchar flag=0;//判斷移動方向 flag==0 左移 flag==1 右移
uchar port_state=0x01;
flowlight=~port_state;
while(1)
{
delay10ms();
if(port_state==0X80&&flag==0)
{
flag=1; //流水燈左移到第八位又移回來 ~1000 0000
}
else
if(port_state==0X01&&flag==1)
{
flag=0; //流水燈右移到第1位又移回來 ~0000 0001
}
if(flag==0)
{
port_state=port_state<<1;
flowlight=~port_state;
}
else
{
port_state=port_state>>1;
flowlight=~port_state;
}
}

串口通信程序:
主機程序:
#include <AT89X52.H>
#define NODE_ADDR 3 //目的節點地址
#define COUNT 10 //發送緩沖區buffer大小
typedef unsigned char uchar;
uchar buffer[COUNT]; //定義buffer
int pt; //設置指針
main()//////////////////////////////////////////發送程序
{

//buffer初始化
pt=0;
while(pt<COUNT)
{
buffer[pt]='1'+pt; //[buffer]=0X31,[buffer+1]= 0X32,[buffer+2] 0X33........
pt++;
}
////初始化串口和T1(波特率發生器)/////////PCON預設為0
PCON=0X00;
SCON=0Xc0; //SCON=1100 0000B,置串口為方式3, SM2=0,REN=0,主機不接收地址幀
TMOD=0X20; //20H=0010 0000B,置T1為方式2,TR1控制T1的開關,定時器方式
TH1=253;TL1=253; //方式2為自動重裝///f(bps)=9600bps (f(osc)=11.0592MHZ)
TR1=1; //啟動T1
ET1=0; //關T1中斷 由於自動重裝
ES=1; //開串口中斷
EA=1; //開系統中斷
pt=0;

///////////////發送地址幀
TB8=1; //地址幀標志
SBUF=NODE_ADDR; //發送目的節點地址
while(pt<COUNT); //等待發送完全部數據
while(1);//不執行任何操作
} //end main

/////發送完中斷函數
void send()interrupt 4
{
TI=0; //清發送中斷標志
if(pt<COUNT)
{
//發送一幀數據
TB8=0;//數據幀標志
SBUF=buffer[pt]; //啟動發送
pt++;//指針指向下一單元
}

else
{
ES=0; //關串口中斷
EA=0; //關系統中斷
return; //若發送完則停止發送並返回
}

}
接收程序:
#include<reg52.h>
#define uchar unsigned char

#define NODE_ADDR 3 //本機節點地址
#define COUNT 10 //定義接收緩沖區buffer大小
uchar buffer[COUNT]; //定義buffer
int pt; //當前位置指針

void send_char_com(unsigned char ch); //向串口發送一個字元的函數聲明
void delay(void);

main() ////////////////串列非同步從機接收程序
{
PCON=0X00; //初始化串口和T1(波特率發生器)/////////PCON預設為0
SCON=0XF0; //SCON=1111 0000B,方式3,SM2=1,REN=1,允許接收地址幀
TMOD=0X20; //20H=0010 0000B,置T1為方式2,TR1控制T1的開關,定時器方式
TH1=253;TL1=253; //方式2為自動重裝///f(bps)=9600bps (f(osc)=11.0592MHZ)
TR1=1; //啟動T1
ET1=0; //關T1中斷 由於自動重裝
ES=1; //開串口中斷
EA=1; //開系統中斷
pt=0;
while(pt<COUNT); //等待接收地址幀和全部數據幀
delay() ;
//接收完後返回數據
SCON=0XC0; //SCON=1100 0000B,置串口為方式3, SM2=0,REN=0,主機不接收地址幀
EA=0;
for(pt=0;pt<COUNT;pt++)
{
send_char_com(buffer[pt]);

}
while(1);
} //end main

///////////串口接收中斷函數
void receive()interrupt 4 using 3
{
RI=0; //清除接收中斷標志
if(RB8==1) //地址幀
{//若為本機地址,則置SM2=0,以便接收數據
if(SBUF==NODE_ADDR)
{
SM2=0;
}

}
/////RB8=0,數據幀
else if(RB8==0)
{buffer[pt]=SBUF; //數據幀送buffer
pt++;
if(pt>=COUNT)
SM2=1; //若接收完全部數據幀,則通信結束;置SM2=1,准備下一次通信
}

}

//向串口發送一個字元
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}

///////////////////////////////////////////////////////////////////////////////////

void delay(void)
{uchar i=100;
while(i--);
}

C. 51單片機 C語言 如何實現中斷調用

#include<stc.h>
sbit
d1=P2^0;
sbit
p1=P2^1;
void
main()
{
方式一;
}
void
main()
{
EA=1;
EX0=1;
IT0=1;
方式二;
}
void
main()
{
EA=1;
EX1=1;
IT0=1;
方式三;
}
void
zd0()
interrupt
0
{
d1=0;
}
void
zd1()
interrupt
1
{
p1=0;
}
用的是外部中斷0和1,程序很簡單,注釋就不寫了。如果有錯誤的話,還請指正。

D. 求51單片機C語言編程

#include<reg52.h>
#include<intrins.h>
#define uintunsignedint
sbitk1=P3^2;
sbitbuz=P2^3;
voiddelay(uintt);//延時程序
voidinit();
voidmain()
{
init();
P1=0xfe;
while(1);
}

voiddelay(uintt)//延時程序
{
uinti,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}

voidinit()
{
IT0=0;
EX0=1;
EA=1;
}
voidcroled()interrupt0
{
buz=0;
delay(10);
if(k1==0)
{
while(k1==0);
P1=_crol_(P1,1);
buz=1;
}
}

E. c語言編寫51單片機程序時出現未定義是為什麼

sbit P10=p^0 少了分號,而且定義埠最右邊的p要大寫. TH0=(655535-1000)/256;TL0=(65535-1000)%256;這里的是延時,這里只用看1000就知道延時1ms,如果裡面的1000換成10000就是延時10ms

F. 51單片機C語言編程

// 51單片機C語言編程,這個時鍾+秒錶可以參考一下。

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit qingling=P1^0; //清零

sbit tiaofen=P1^1; //調分

sbit tiaoshi=P1^2; //調時

sbit sounder=P1^7; //naozhong

uint a,b;

uchar hour,minu,sec, //時鍾

hour0,minu0,sec0,//秒錶

hour1,minu1,sec1;

h1,h2,m1,m2,s1,s2,//顯示位

k,s;//狀態轉換標志

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*****************函數聲明***********************/

void keyscan();

void init();

void delay(uchar z);

void display(uchar,uchar,uchar);

void sounde();

/*****************主函數*************************/

void main()

{

init();

while(1)

{

while(TR1)

{

keyscan(); //掃描函數

while(s==1) //s是狀態標志,當s=0時,鬧鍾取消。s=1時,設定鬧鍾時間(也是通過調時,調分函數);

{ //s=2時,鬧鍾工作,時間與設定時刻一致時,鬧鍾響(一分鍾後自動關閉,可手動關閉)。再次切換,s=0.

keyscan(); //s狀態切換(0-》1-》2-》0)通過外部中斷1實現。

display(hour1,minu1,sec1); //鬧鍾時刻顯示

}

display(hour0,minu0,sec0);//時鍾表顯示

while(k) /*k是秒錶狀態(0-》1-》2-》0)通過外部中斷0實現。0秒錶關;1秒錶從零計時;2秒錶停,顯示計時時間*/

{

display(hour,minu,sec); //秒錶顯示

}

}

}

}

/*****************初始化函數***********************/

void init()

{

a=0;

b=0;

k=0;

s=0;

hour0=0;

minu0=0;

sec0=0;

hour=0;

minu=0;

sec=0;

hour1=0;

minu1=0;

sec1=0;

TMOD=0x11; //定時器0,1工作於方式1;賦初值

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

EX0=1; //秒錶中斷

EX1=1; //鬧鍾設定中斷

ET0=1;

ET1=1;

IT0=1; //邊沿觸發方式

IT1=1;

PX0=1;

PX1=1;

TR0=0; //初始,秒錶不工作

TR1=1; //時鍾一開始工作

}

/*****************定時器0中斷*************/

void timer0_int() interrupt 1 //秒錶

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

a++;

if(a==2)

{

a=0;

sec++;

if(sec==100)

{

sec=0; //毫秒級

minu++;

if(minu==60)

{

minu=0; //秒

hour++;

if(hour==60) //分

{

hour=0;

}

}

}

}

}

/*************外部中斷0中斷函數************/

void ex0_int() interrupt 0

{

k++;

if(k==3)

k=0;

if(k==1)

{

TR0=~TR0;

if(TR0==1)

{

hour=0;

minu=0;

sec=0;

}

}

if(k==2)

{

TR0=~TR0;

}

}

/*************外部中斷1中斷函數************/

void ex1_int() interrupt 2

{

s++;

if(s==3)

s=0;

}

/*************定時器1中斷****************/

void timer1_int() interrupt 3 //控制時鍾工作

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

if(s==2)

{

if(hour1==hour0 && minu0==minu1)

sounde();

}

b++;

if(b==20)

{

b=0;

sec0++;

if(sec0==60)

{

sec0=0;

minu0++;

if(minu0==60)

{

minu0=0;

hour0++;

if(hour0==24)

hour0=0;

}

}

}

}

/*************鍵盤掃描****************/

void keyscan()

{

if(s==1)

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec1=0;

minu1=0;

hour1=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu1++;

if(minu1==60)

{

minu1=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour1++;

if(hour1==24)

{

hour1=0;

}

while(!tiaoshi);

}

}

else //調整時鍾時間

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec0=0;

minu0=0;

hour0=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu0++;

if(minu0==60)

{

minu0=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour0++;

if(hour0==24)

{

hour0=0;

}

while(!tiaoshi);

}

}

}

/*************顯示函數****************/

void display(uchar hour,uchar minu,uchar sec)

{

h1=hour/10;

h2=hour%10;

m1=minu/10;

m2=minu%10;

s1=sec/10;

s2=sec%10;

P0=0xff;

P2=table[h1];

P0=select[7];

delay(5);

P0=0xff;

P2=table[h2];

P0=select[6];

delay(5);

P0=0xff;

P2=0x40;;

P0=select[5];

delay(5);

P0=0xff;

P2=table[m1];

P0=select[4];

delay(5);

P0=0xff;

P2=table[m2];

P0=select[3];

delay(5);

P0=0xff;

P2=0x40;

P0=select[2];

delay(5);

P0=0xff;

P2=table[s1];

P0=select[1];

delay(5);

P0=0xff;

P2=table[s2];

P0=select[0];

delay(5);

}

/*************鬧鍾函數****************/

void sounde()

{

sounder=~sounder;

}

/*************延時函數****************/

void delay(uchar z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

G. 51單片機按鍵計數器C語言編程

#include<reg51.h>
#defineucharunsignedchar;
uchardistab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0到f
ucharnumber,dat,dis[4];
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=3;
switch(number)
P1=0x20<<number;
P0=distab[dis[number]];
}
voidint0isr()interrupt0
{
dat++;
dat%=1000;
dis[0]=dat%10;
dis[1]=dat%100/10;
dis[2]=dat/100;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR1=1;
ET1=1;
EX0=1;
IT0=1;
EA=1;
while(1);
}

H. 用C語言寫51單片機鬧鍾程序

//*********************************************************
//實現功能:本程序實現在P1口模擬一個流水燈程序
//*********************************************************
#include <reg51.h>
#define p_out P1 //宏定義輸出的i/o口為P1
//******************時間延遲函數**********************
//描 述:用指令實現延時一段時間
//入口參數:int i,為時間延遲參數
//****************************************************
void delay_time(int i)
{
while(i)
i--;
}
//******************主函數***************************
//描 述:實現在P1口模擬一個流水燈程序
//****************************************************
void main(void)
{unsigned char i=0; //初始化一個局部變數為0
p_out=0xff; //初始化將要輸出的i/o口,輸出高電平,熄滅所有燈
while(1)
{
for(i=0;i<8;i++)
{
p_out=~(1<<i);//點亮一個燈,
delay_time(50000); //延遲一段時間
p_out=0xff;//熄滅所有燈
}
}
}
//**************************************
//****************************************************
//實現功能:把鍵盤輸入的鍵盤碼,用led顯示出來
//****************************************************
#include <reg51.h>
#define p_key P1
#define led_date P0
#define choose_p P2
unsigned char change(unsigned char i);
unsigned int display_num=0;
//******************時間延遲函數**********************
//描 述:用指令實現延時一段時間
//入口參數:int i,為時間延遲參數
//****************************************************
void delay_time(int i)
{
while(i)
i--;
}
//******************按鍵掃描函數**********************
//描 述:對4*4鍵盤進行掃描,程序只適合4*4鍵盤使用,
// 鍵盤佔用一組完整的i/o口,在使用這個程序前
// 要宏定義p_key為用戶實際連接鍵盤的i/o口
// #define p_key Pn;//(n=0、1、2、3)
//返回參數:若有檢測到按鍵就返回按鍵的編號,否則返回0xff
//****************************************************
unsigned char read_key(void)
{
unsigned char j,key,key_buf=0;
p_key=0xff;
//檢測是否有建按下//
p_key=0xf0;
key=p_key;
if(key==0xf0)
{
return(0xff);//沒按鍵按下,返回0xff
}
//有按下,延時去抖//
delay_time(5000);
//確認是否有建按下//
p_key=0xf0;
key=p_key;
if(key==0xf0)
{
return(0xff);//沒按鍵按下,返回0xff
}
//真的有按鍵按下,掃描是哪一行有按鍵按下//
for(j=0;j<4;j++)
{key=p_key&(0x10<<j);
if (key)
{
key=p_key;
}
else
{
key_buf=j*4;
p_key=~(0x10<<j);//第j行的按鍵按下了,第j行輸出0,其他的i/o口輸出1
//掃描是第j行的哪個按鍵按下//
for(j=0;j<4;j++)
{
key=p_key&(1<<j);
if (key)
{
key=p_key;
}
else
{
key_buf+=j;
return(key_buf);//掃描到按鍵的確定位置,返回按鍵的編號
}
}
}
}
//沒掃描到按鍵,//
return(0xff);
}
//***************七段數碼管顯示函數*******************
//描 述:對四位的掃描型七段數碼管進行掃描顯示,在使用
// 前要定義一個全局變數display_num
// unsigned int display_num;
//入口參數:unsigned int num,要顯示的數字(0-9999)
//****************************************************
void display(unsigned int num)
{
if(num<10000)
{
display_num=num;
}
choose_p|=3;//先關顯示
led_date=change(display_num/1000);//得到千位的數字,並轉換成七段碼型
choose_p&=0xfe;//選通千位
delay_time(50);//延時一段時間
choose_p|=1;//關顯示
display_num=display_num%1000;
led_date=change(display_num/100);//得到百位的數字,並轉換成七段碼型
choose_p&=0xfd;//選通百位
delay_time(50);//延時一段時間
choose_p|=2;//關顯示
display_num=display_num%100;
led_date=change(display_num/10);//得到十位的數字,並轉換成七段碼型
choose_p&=0xfb;//選通十位
delay_time(50);//延時一段時間
choose_p|=4;//關顯示
led_date=change(display_num%10);//得到個位的數字,並轉換成七段碼型
choose_p&=0xf7;//選通十位
delay_time(50);//延時一段時間
choose_p|=8;//關顯示
}
//****************數字-碼型轉換函數*******************
//描 述:把數字轉換成七段碼型,此程序僅配合共陽的七
// 段數碼管使用
//入口參數:unsigned char i,要轉換的數字(0-9),
//返回參數:轉換後的七段碼型,0xff表示轉換失敗
//****************************************************

unsigned char change(unsigned char i)
{
switch(i)
{
case 0:
return(0xc0);//0的七段碼型
case 1:
return(0xf9);//1的七段碼型
case 2:
return(0xa4);//2的七段碼型
case 3:
return(0xb0);//3的七段碼型
case 4:
return(0x99);//4的七段碼型
case 5:
return(0x92);//5的七段碼型
case 6:
return(0x82);//6的七段碼型
case 7:
return(0xf8);//7的七段碼型
case 8:
return(0x80);//8的七段碼型
case 9:
return(0x90);//9的七段碼型
default:
return(0xff);//轉換失敗
}
}
//*********************主函數*************************
//描 述:把鍵盤輸入的鍵盤碼,用led顯示出來
//****************************************************
int main(void)
{unsigned char i;
while(1)
{
i=read_key();//掃描鍵盤
if(i<16)
display((unsigned int)i);//有效的鍵盤值
else
display(0xffff);//數據無效
}
}
//兩個程序加起來就可以完成你要求的功能,有說明,你認真看一下吧。

I. 單片機 c 語言 實現中斷中void it0(void) interrupt 0 using 1 後面買的interrupt 0 using 1什麼意思

此函數為外部中斷1函數 ,函數名為it0(),interrupt後接中斷號,0 代表外部中斷1,1 代表定時器中斷0,2 代表外部中斷2,3代表定時器中斷1,4 代表串口中斷。using後接寄存器號 這個不需要了解,如果你不知道用哪個寄存器,直接把中斷函數寫為 void it0(void) intettupt 0 即可 ,單片機會自動選擇空閑寄存器的。