//==声明区=================================================
#include<reg51.h>//定义8051寄存器的头文件,P2-17~19
#define SEG P0 //定义七段LED数码管接至Port 0
/*声明七段LED数码管驱动信号数组(共阳)*/
char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //数字0-4
0x92,0x83,0xf8,0x80,0x98}//数字5-9
void delay(int) //声明延迟函数
//==主程序==========================================
main() //主程序开始
{ unsigned char i//声明无符号变量i
while(1)//无穷循环,程序一直跑
for(i=0i<10i++) //显示0-9,共10次
{ SEG=TAB[i]//显示数字
delay(500) //延迟500×1m=0.5秒
} //for循环结束
} //主程序结束
//==子程序==========================================
/* 延迟函数,延迟约x×1ms */
void delay (int x) //延迟函数开始
{int i,j //声明整形变量i,j
for (i=0i<xi++) //计数x次,延迟x×1ms
for (j=0j<160j++) //计数120次,延迟1ms
} //延迟函数结束
#include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器unsigned char dat//用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit gewei=P2^2//个位选通定义
sbit shiwei=P2^3//十位选通定义
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71}
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,}// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{unsigned int i
for(i=0i<100i++)
tc--}
}
void LED() //LED显示接收到的数据
{
shiwei=0
P0=~table[dat/16]
Delay(8)
shiwei=1
gewei=0
P0=~table[dat%16]
Delay(5)
gewei=1
}
void Init_Com(void)//功能:串口初始化,波特率9600,方式1
{
TMOD = 0x20
PCON = 0x00
SCON = 0x50
TH1 = 0xFd
TL1 = 0xFd
TR1 = 1
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
Init_Com()//串口初始化
// P1=0xf0
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF //接收数据SBUF赋与dat
RI=0 //RI清零。
SBUF = dat //在原样把数据发送回去
}
LED()//显示接收到的数据
}
}
实验一实验(一):本程序的功能是点亮一个发光二极管
#include<reg51.h>
sbit led=P1^0
void main()
{
led=0
while(1)
}
实验(二):本程序的功能是点亮一个发光二极管
#include<reg51.h>
Void main()
{
P1=0xfe
While(1)
}
实验(三):本程序的功能是点亮三个发光二极管
#include <reg51.h>
Sbit LED0=P1^0
Sbit LED1=P1^1
Sbit LED2=P1^2
Void main()
{
LED0=0
LED1=0
LED2=0
While(1)
}
实验(四):本程序的功能是点亮三个发光二极管
#include <reg51.h>
Void main()
{
P1=0xf8
While(1)
}
实验二
实验(一):本程序的功能是使D0交替闪烁,频率始终一致
#include<reg51.h>
sbit LED0=P1^0
void Delay(unsigned int t)
void main()
{
while(1)
{
LED0=0
Delay(10000)
LED0=1
Delay(10000)
}
}
void Delay(unsigned int t)
{
while(--t)
}
实验(二):本程序的功能是使D0交替闪烁,前10次的闪烁频率与后10次不同
#include<reg51.h>
sbit LED0=P1^0
void Delay(unsigned int t)
void main()
{
Unsigned char i
while(1)
{
For(i=0i<10i++)
{
LED0=0
Delay(10)
LED0=1
Delay=(10)
}
For(i=0i<10i++)
{
LED0=0
Delay(6000)
LED0=1
Delay(6000)
}
}
}
Void Delay(unsigned int t)
{
Unsigned i,j
For(i=0i<ti++)
For(j=0j<1000j++)
}
实验(三):本程序的功能是使D0、D2、D4交替闪烁,前10次的闪烁频率与后10次不同
#include<reg51.h>
sbit LED0=P1^0
sbit LED2=P1^2
sbit LED4=P1^4
void Delay(unsigned int t)
void main()
{
Unsigned char i
while(1)
{
For(i=0i<10i++)
{
LED0=0
LED2=0
LED4=0
Delay(100)
LED0=1
LED2=1
LED4=1
Delay=(100)
}
For(i=0i<10i++)
{
LED0=0
LED2=0
LED4=0
Delay(1000)
LED0=1
LED2=1
LED4=1
Delay(1000)
}
}
}
Void Delay(unsigned int t)
{
Unsigned i,j
For(i=0i<ti++)
For(j=0j<1000j++)
}
实验(四):本程序的功能是使D0、D2、D4交替闪烁,前10次的闪烁频率与后10次不同
#include<reg51.h>
void Delay(unsigned int t)
void main()
{
Unsigned char i
while(1)
{
For(i=0i<10i++)
{
P1=0xff
Delay(100)
P1=0xea
Delay=(100)
}
For(i=0i<10i++)
{
P1=0xff
Delay(1000)
P1=0xea
Delay(1000)
}
}
}
Void Delay(unsigned int t)
{
Unsigned i,j
For(i=0i<ti++)
For(j=0j<1000j++)
}
实验三
实验(一):Proteus本程序的功能是使D0-D7从右至左依次被点亮
#include<reg51.h>
void Delay(unsigned int t)
void main()
{
unsigned char i
Delay(50000)
P1=0xff
for(i=0i<8i++)
{
Delay(50000)
P1<<=1
}
while(1)
}
void Delay(unsigned int t)
{
while(--t)
}
实验(二):本程序的功能是使D0-D7从左至右依次被点亮
#include<reg51.h>
void Delay(unsigned int t)
void main()
{
unsigned char i
Delay(50000)
P1=0xff
for(i=0i<8i++)
{
Delay(50000)
P1>>=1
}
while(1)
}
void Delay(unsigned int t)
{
while(--t)
}
实验四
实验(一):本程序的功能是使D0-D7从有至左被点亮,某时刻只有一个灯亮,最终D7在亮
#include<reg51.h>
#include<intrins.h>
void delay(unsigned int t)
void main()
{
unsigned char i
P1=0xfe
delay(50000)
for(i=0i<7i++)
{
P1=crol_(P1,1)
delay(50000)
}
while(1)
}
void delay(unsigned int t)
{
while(--t)
}
实验(二):本程序的功能是使D0-D7从有至左被点亮,某时刻只有一个灯亮,最终D0在亮
#include<reg51.h>
#include<intrins.h>
void delay(unsigned int t)
void main()
{
unsigned char i
P1=0x7f
delay(50000)
for(i=0i<7i++)
{
P1=_crol_(P1,1)
delay(50000)
}
while(1)
}
void delay(unsigned int t)
{
while(--t)
}
实验五
#include<reg51.h>
sbit K0=P1^0
sbit K1=P1^1
sbit LED0=P1^2
sbit LED1=P1^3
void main()
{
while(1)
{
if(K0==1)
LED0=1
else
LED0=0
if(K1==1)
LED1=1
else
LED1=0
}
}
实验六
(1)实验箱程序清单
#include<reg51.h>
sbit K0=P0^0
sbit lemp=P1^0
void main()
{
while(1)
{
if(K0==0)
lemp=0
else
lemp=1
}
}
2.Proteus 仿真程序清党
#include<reg51.h>
sbit K0=P0^0
sbit lamp=P3^0
void main()
{
While(1)
{
if(K0==0)
lamp=0
else
lamp=1
}
}
实验七
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit K0=P1^0
void delay(uint x)
{
uint i,j
for(i=0i<xi++)
for(j=0j<1000j++)
}
void main()
{
while(1)
{
K0=1
delay(50)
K0=0
delay(50)
}
}
实验十
(1)仿真一程序清单
#include<reg51.h>
sbit sdata=P1^0
sbit clk=P1^1
void delay(unsigned int x)
{
unsigned int I,j
for(i=0i<xi++)
for(j=0i<60000i++)
}
void write_74ls164(unsigned char dat)
{
unsigned char i
for(i=0i<8i++)
{
Clk=0
sdata=dat&0x01
clk=1
delay(50000)
dat=dat>>1
}
}
void main()
{
write_74ls164(0x01)
while(1)
}
(2)仿真二程序清单
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^0
sbit clk=P1^1
void write_741s164(uchar dat)
{
uchar i
for(i=0i<8i++)
{
clk=0
sda=dat&0x01
clk=1
dat=dat>>1
}
}
void delay(uint x)
{
uchar y
for(x>0x--)
for(y=1000y>0y--)
}
void main()
{
while(1)
{
write_741s164(0xff)
delay(1000)
}
}
(3)仿真三程序清单
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^0
sbit clk=P1^1
uchar a[2]={0xff,0xf6}
void write_741s164(uchar dat)
{
uchar i
for(i=0i<8i++)
{
clk=0
sda=dat&0x01
clk=1
dat=dat>>1
}
}
void delay(uint x)
{
uchar y
for(x>0x--)
for(y=1000y>0y--)
}
void main()
{
while(1)
{
write_741s164(a[0])
write_741s164(a[1])
delay(1000)
}
}
(4)实验箱程序清单
#include<reg51.h》
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^0
sbit clk=P1^1
uchar a[5]={0xfe,0xfc,0x9c,0xb6,0x60}
void write_74ls164(uchar dat)
{
uchar I
for(i=0i<8i++)
{
clk=0
sda=dat&0x01
clk=1
dat=dat>>1
}
}
void delayls(uint x)
{
uchar y
for(x>0x--)
for(y=1000y>0y--)
}
void main()
{
while(1)
{
write_74ls164(a[0])
write_74ls164(a[1])
write_74ls164(a[2])
write_74ls164(a[3])
write_74ls164(a[4])
delayls(3000)
}
}
实验十一
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar duanma[6]={0x06,0x7d,0x7f,0x06,0x7d,0x7f}
uchar weima[6]={0x20,0x10,0x08,0x04,0x02,0x01}
void dealy(uint x)
{
uint i,j
for(i=0i<xi++)
for(j=0j<1000j++)
}
void main()
{
uchar i
while (1)
{
for(i=0i<6i++)
{
P0=duanma[i]
P1=weima[i]
dealy(80)
}
}
}
实验十二
#include<reg51.h>
void main(){
unsigned char x
while(1)
{
x=P1
switch(x)
{
case 0xfe:P2=0x3fbreak
case 0xfd:P2=0x06break//84218421
case 0xfb:P2=0x5bbreak//2 01011011
case 0xf7:P2=0x4fbreak//3 01001111
case 0xef:P2=0x66break//4 01100110
case 0xdf:P2=0x6bbreak//5 01101101
case 0xbf:P2=0x7dbreak//6 01111101
case 0x7f:P2=0x07break
}
}
}
实验十三
#include<reg51.h>
#define GPIO_KEY P1
unsigned char m[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}
unsigned char KeyValue
void ys(unsigned int c)
void KeyDown()
void main()
{
while(1)
{
KeyDown()
P2=m[KeyValue]
ys(25)
}
}
void KeyDown()
{
char a=0
GPIO_KEY=0x0f
if(GPIO_KEY!=0x0f)
{
ys(1)
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0xf0
switch(GPIO_KEY)
{
case(0xe0): KeyValue=0break
case(0xd0): KeyValue=1break
case(0xb0): KeyValue=2break
case(0x70): KeyValue=3break
}
GPIO_KEY=0x0f
switch(GPIO_KEY)
{
case(0x0e): KeyValue=KeyValuebreak
case(0x0d): KeyValue=KeyValue+4break
case(0x0b): KeyValue=KeyValue+8break
case(0x07): KeyValue=KeyValue+12break
}
while((a<50)&&(GPIO_KEY!=0x0f))
{
ys(1)
a++
}
}
}
}
void ys(unsigned int c)
{
unsigned char a,b
for(c>0c--)
{
for(b=38b>0b--)
{
for(a=130a>0a--)
}
}
}
实验十四
#include<reg51.h>
sbit sz=P3^4
void delay(unsigned int x)
{
unsigned int i,j
for(i=0i<xi++)
for(j=0j<1000j++)
}
void main()
{
TMOD=0X05
TH0=0
TL0=0
TR0=1
while(1)
{
P1=TL0
delay(0)
}
}
实验十五
(1)中断方式
#include<reg51.h>
sbit led=P1^0
unsigned int counter
void timer0_inter()interrupt 1
{
counter++
}
void main()
{
led=1
TH0=0x9c
TL0=0x9c
TMOD=0X02
ET0=1
EA=1
TR0=1
while(1)
{
if(counter==10000)
{
counter=0
led=~led
}
}
}
(2)非中断方式:
#include<reg51.h>
sbit led=P1^0
void timer0(unsigned int x)
{
unsigned int i=0
TH0=0x9c
TL0=0x9c
TR0=1
while(i<x)
{
while(TF0==0)
i++
TF0=0
}
}
void main()
{
Led=1
TMOD=0x02
while(1)
{
led=0
timer0(10000)
led=1
timer0(10000)
}
}
实验十六
#include<reg51.h>
sbit P1_0=P1^0
sbit P1_1=P1^1
void delay()
void main()
{
P1_0=0
P1_1=0
EA=1
IT0=1
EX0=1
while(1)
{
P1_1=0
delay()
P1_1=1
delay()
}
}
void int0() interrupt 0
{
bit saveled
EA=0
saveled=P1_1
P1_0=!P1_0
delay()
delay()
delay()
P1_1=saveled
EA=1
}
void delay()
{
unsigned int m,n
for(m=0m<250m++)
for(n=0n<255n++)
}
实验十七
#include<reg51.h>
void delay()
void right()
void main()
{
P1=0xff
EA=1
IT0=1
EX0=1
while(1)
{
right()
}
}
void int0() interrupt 0
{
unsigned char saveled,i
EA=0
saveled=P1
P1=0xff
for(i=0i<10i++)
{
P1=~P1
delay()
}
P1=saveled
EA=1
}
void right()
{
unsigned char i,k
k=0x80
for(i=0i<8i++)
{
P1=~k
delay()
k>>=1
}
}
void delay()
{
unsigned int m,n
for(m=0m<250m++)
for(n+0n<255n++)
}
实验十八
#include<reg51.h>
sbit led1=P1^0
sbit led2=P1^1
void delayls()
void main()
{
EA=1
IT0=1
EX0=1
TMOD=0x01
TH0=0x3c
TL0=0xb0
TR0=1
while(1)
{
led1=0
delayls()
led1=1
led2=0
delayls()
led2=1
}
}
void int0() interrupt 0
{
unsigned char saveled
EA=0
saveled=P1
led1=1
led2=0
delayls()
delayls()
delayls()
delayls()
led2=1
P1=saveled
EA=1
}
void delayls()
{
unsigned char i=0
while(i!=20)
{
if(TF0==1)
{
i++
TH0=0x3c
TL0=0xb0
TF0=0
}
}
}
实验十八
#include<reg51.h>
sbit led1=P1^0
sbit led2=P1^1
void delayls()
void main()
{
EA=1
IT0=1
EX0=1
TMOD=0x01
TH0=0x3c
TL0=0xb0
TR0=1
while(1)
{
P1_0=0
delayls()
P1_0=1
P1_1=0
delayls()
P1_1=1
}
}
void int0() interrupt 0
{
unsigned char saveled
EA=0
saveled=P1
P1_0=1
P1_1=0
delayls()
delayls()
delayls()
delayls()
P1_1=1
P1=saveled
EA=1
}
void delayls()
{
unsigned char i=0
while(i!=20)
{
if(TF0==1)
{
i++
TH0=0x3c
TL0=0xb0
TF0=0
}
}
}
实验二十
(1)串口以工作方式1实现数据收发
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint x)
{
uint y,z
for(y=xy>0y--)
for(z=250z>0z--)
}
void timer1_int()
{
TMOD=0x20
TL1=0xfd
TH1=0xfd
TR1=1
}
void serial_int()
{
PCON=0
SCON=0x40
}
void main()
{
uchar send_data=0
uchar i=0
timer1_int()
serial_int()
IE=0x00
while(1)
{
send_data='A'
for(i=0i<26i++)
{
SBUF=send_data
while(TI==0)
TI=0
send_data++
delay(1000)
}
delay(6000)
}
}
(2)89c51点对点通讯
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P2_0=P2^0
sbit P2_1=P2^1
uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
uchar num
void delay(uchar x)
{
uchar y,z
for(y=xy>0y--)
for(z=250z>0z++)
}
void display(uchar num)
{
P2_0=0
P0=~led[num/10]
delay(5)
P2_0=1
P2_1=0
P0=~led[num%10]
delay(5)
P2_1=1
}
void TAKE_SBUF(uchar dat)
{
ES=0
SUBF=dat
while(~TI)
TI=0
ES=1
}
void main()
{
SCON=0x90
EA=1
ES=1
P2=0xff
num=0
TAKE_SUBF(num+1)
while(1)
}
void intorupt()interrupt 4
{
uchar num
Uchar i
RI=0
num=SUBF
if(num>99)
Num=0
for(i=100i>0i--)
display(num)
TAKE_SBUF(num+1)
}
实验二十三
#include<reg51.h>
#define ZHK P0
#define ZLK P1
#define uchar unsigned char
#define uint unsigned int
uchar h1[]={0xf7,0xef}
uchar l1[]={0x18,0x18}
uchar h2[]={0xfb,0xf7,0xef,0xdf}
uchar l2[]={0x3c,0x24,0x24,0x3c}
uchar h3[]={0xfd,0xfb,0xf7,0xef,0xdf,0xbf}
uchar l3[]={0x7e,0x42,0x42,0x42,0x42,0x7e}
uchar h4[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}
uchar l4[]={0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff}
void delay(uchar x)
{
uchar y,z
for(y=xy>0y--)
for(z=250z>0z--)
}
void main()
{
uchar i
while(1)
{
for(i=0i<2i++)
{
ZHK=h1[i]
ZLK=l1[i]
delay(5)
}
delay(100)
for(i=0i<4i++)
{
ZHK=h2[i]
ZLK=l2[i]
delay(5)
}
delay(100)
for(i=0i<6i++)
{
ZHK=h3[i]
ZLK=l3[i]
delay(5)
}
delay(100)
for(i=0i<8i++)
{
ZHK=h4[i]
ZLK=l4[i]
delay(5)
}
delay(100)
}
}
实验二十四
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcde=P1^0
sbit lcdrs=P1^1
uchar i
uchar a1[]="Welcome to "
uchar a2[]="an zhi yuan"
void chushihua()
void write_c(uchar c)
void write_d(uchar d)
void delay(uint x)
void main()
{
chushihua()
write_c(0x80+0x00)
for(i=0i<11i++)
{
write_d(a1[i])
delay(10)
}
write_c(0x80+0x41)
for(i=0i<11i++)
{
write_d(a2[i])
delay(10)
}
for(i=0i<3i++)
{
write_c(0x18)
delay(10)
}
while(1)
}
void chushihua()
{
lcde=0
write_c(0x38)
write_c(0x0f)
write_c(0x01)
write_c(0x06)
}
void write_c(uchar c)
{
lcdrs=0
P2=c
delay(2)
lcde=1
delay(5)
lcde=0
delay(2)
}
void write_d(uchar d)
{
lcdrs=1
P2=d
delay(2)
lcde=1
delay(5)
lcde=0
delay(2)
}
void delay(uint x)
{
uint i,j
for(i=xi>0i--)
for(j=120j>0j--)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)