单片机程序源代码
0X99,0X92,0X82,0XF8,
0X80,0X90};
uint key=0;
void int_int()
{
EA=1;
IT0=1;
EX0=1;
}
void count_num() interrupt 0
{
if(key==9)key=0;
else key++;
}
void main()
{
int_int();
void delayms(uint ms)
{
uint i;
while(ms--)
{
for(i=0;i<120;++);
}
}
void main()
{
while(1)
{
LED1=0;
LED2=1;
delayms(500);
LED1=1;
LED2=0;
delayms(500);
}
}
任务二:流水广告灯的设计
for(j=0;j<2;j++)
{
P0=xx[j];
delayms(500);
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
P0=yy[j] ;
delayms(500);
}
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{
P0=zz[j] ;
delayms(500);
{
case 0xe0:num=5;break;
case 0xd0:num=6;break;
case 0xb0:num=7;break;
case 0x70:num=8;
}
}
if(temp==0x0b)
{
P2=0xf0;
temp=P2;
temp&=0xf0;
switch(temp)
{
case 0xe0:num=9;break;
闭幕式:开始D0~D7全亮,延时片刻后首先D0和D7灭,其次是D1和D6灭,再是D2和D5灭,最后是D3和D4灭。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xe7,0xc3,0x81,0x00};
if(temp!=0x0f)
keyscan();
display(num);
}
}
(2)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P2^0;
sbit LED2=P2^1;
uchar num;
#define uint unsigned int
#include<intrins.h>
void delayms(uint ms)
{
uint i;
while(ms--)
{
for(i=0;i<110;i++);
}
}
void main()
{
uint i,j,xx[2]={0xaa,0xff},yy[2]={0xf0,0x0f},zz[2]={0xb6,0xff};
利用89c51单片机的端口控制8个LED(D0~D7)循环点亮,刚开始时D0点亮,延时片刻后,接着D1点亮,然后依次点亮D2->D3->D4->D5 ->D6->D7,然后再点亮D7->D6->D5->D4 ->D3->D2->D1->D0,重复循环。
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint i;
uchar temp;
uint a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delayms(uint ms)
{
while(ms--)
uchar b[8]={0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05},j;
uint i;
while(1)
{ j=0x01;
for(i=0;i<8;i++)
{
P2=j;
P0=a[b[i]];
j=_crol_(j,1);
delay(3);
}
}
}
任务七:查询式按键设计
将8个按键从1~8进行编号,如果其中一个键被按下,则在LED数码管上显示相应的键值。
}
}
}
任务五:单个LED数码管显示设计
使用89c51的P0口作为输出口,外接LED数码管,编写程序,使数码管循环显示从0~9的加1计数。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[10]={ 0XC0,0XF9,0XA4,0XB0,
uint num=0;
void delay(uint x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=120;j>0;j--);
}
keyscan()
{ uint temp;
temp=P2;
temp&=0x0f;
if(temp==0x0e)
{
P2=0xf0;
temp=P2;
temp&=0xf0;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=120;j>0;j--);
}
void main()
{
uint i;
while(1)
{
P1=0xff;
delay(500);
for(i=0;i<4;i++)
{
P1=table[i];
delay(500);
}
for(i=3;i>0;i--)
{
P1=table[i-1];
delay(500);
}
}
}
任务四:复杂广告灯的设计
利用89c51单片机的端口实现8个LED(D0~D7)复杂广告灯的控制,要求显示规律为:正向流水->反向流水->隔灯闪烁3次->高四盏、低四盏闪烁2次->隔两盏闪烁3次,再重复循环。
#include<reg52.h>
uchar code LED_code[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
};//数码管字形码编码
void delay(uint x)
{
uchar i,j;
for(i=x;i>0;i--)
unsigned char aa;
while(1)
{
aa=0xfe;
for(i=0;i<7;i++)
{
P0=aa;
aa=_crol_(aa,1);
delayms(500);
}
for(i=0;i<8;i++)
{
P0=aa;
aa=_cror_(aa,1);
delayms(500);
}
for(i=0;i<3;i++)
#define uchar unsigned char
delay(ms)
{
while(ms--)
{ int i;
for(i=0;i<110;i++);
}
}
main()
{
uchar a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
第二章
任务一:闪烁广告灯的设计
利用89c51单片机的端口控制两个LED(D0和D1),编写程序,实现两个LED互闪。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbitLED1=P0^0;
sbit LED2=P0^1;
case 0xb0:num=15;break;
case 0x70:num=16;
}
}
return num;
}
void display(uint num)
{if(num==0)
P0=0xbf;
P0=table[num] ;
}
main()
{
uint temp;
while(1)
{
P2=0x0f;
temp=P2;
case 0xdf:
P2=a[6]; break;
case 0xbf: