求单片机实验七段数码管显示实验程序

求单片机实验七段数码管显示实验程序,第1张

/* ch03-3-4.c - 七段LED数码管实验程序 */

//==声明区=================================================

#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--)

}


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

原文地址: http://outofmemory.cn/yw/10985666.html

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

发表评论

登录后才能评论

评论列表(0条)

保存