1.#include<reg51.h>
#include <intrins.h>
unsigned int i;
void delay(unsigned int j)
{
while(--j);
}
void main(){
P1=0xfe;
while(1){
delay(63500);
P1=_crol_(P1,1);
}
}
2.
#include<reg51.h>
unsigned intseg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd};
unsigned int i;
void delay(unsigned int j)
{
while(--j);
}
void main()
{
while(1)
{
for(i=0;i<14;i++)
{
P1=seg[i];
delay(63500);
}
}
}
3. #include <reg51.h>
unsigned int i,temp;
void delay(unsigned int j)
{
while(--j);
}
void main()
{
while(1)
{
temp=0x01;
for(i=0;i<8;i++)
{
P1=~temp;
delay(63500);
temp=temp<<1;
}
temp=0x80;
for(i=0;i<8;i++)
{
P1=~temp;
delay(63500);
temp=temp>>1;
}
}
}
开关检测
#include <reg51.h>
sbit a1=P1^0;
sbit a2=P1^1;
void main(){
while(1)
{
if(a2==0)a1=0;
elsea1=1;
}
}
Button:
#include <reg51.h>
sbit a=P1^0;
sbit b=P1^1;
bit flag=0;
void main()
{
a=1;
while(1)
{
if(b==1)
{
while(b==1);
flag=!flag;
}
if(flag==1)a=0;
elsea=1;
}
}
LED
循环显示0,2,4,6,8,1,3,5,7,9
#include <reg51.h>
unsigned int i;
unsigned intseg[]={0xc0,0xa4,0x99,0x82,0x80,0xf9,0xb0,0x92,0xf8,0x90};
void delay(unsigned int j)
{
while(--j);
}
void main()
{
while(1)
{
for(i=0;i<10;i++)
{
P0=seg[i];
delay(63500);
}
}
}
LED的静态显示:实现无闪烁,亮度较高。不过占用引脚多,一个AT89C51只能驱动4个LED。
显示2.7
#include <reg51.h>
oid main()
{
P0=0xa4;
P1=0xf8;
While(1);
}
2.动态显示:
向段码线输出欲显示字符的码段。每一时刻,只有1位选线有效。即选中某一位显示,其他选线都无效。由于数码管余辉和视觉暂留效果。控制好显示时间和间隔,能够造成多位同时亮的假象。
#include <reg51.h>
#include <intrins.h>
unsigned char codeseg[]={0x40,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8};
void delay(unsigned int j){
while(--j);
}
void main(){
unsigned int i;
P1=0x01;
while(1)
{
for(i=0;i<8;i++){
P2=seg[i];
delay(200);
P1=_crol_(P1,1);
}
}
}
交通信号灯
#include <reg51.h>
void delay(unsigned int j)
{
while(--j);
}
sbit a1=P0^0; //绿
sbit a2=P0^1; //黄
sbit a3=P0^2;
sbit a4=P2^0;
sbit a5=P2^1;
sbit a6=P2^2; //红
unsigned intseg[]={0x90,0x80,0xF8,0x82,0x92,0x99,0xB0,0xA4,0xF9,0xC0};
void main()
{
unsigned int i;
while(1)
{
a1=0;
a6=0;
for(i=0;i<4;i++)
{ P1=seg[i];
P3=seg[i+3];
delay(63500);
delay(63500);
}
for(i=0;i<3;i++)
{ P1=seg[i+4];
P3=seg[i+7];
a1=1;delay(63500);
a1=0;delay(63500);
}
a1=1;
a2=0;
for(i=0;i<3;i++)
{ P1=seg[i+7];
P3=seg[i+7];
delay(63500);delay(63500);
}
a6=1;
a2=1;
a3=0;
a4=0;
for(i=0;i<4;i++)
{ P1=seg[i+3];
P3=seg[i];
delay(63500);delay(63500);
}
for(i=0;i<3;i++)
{ P1=seg[i+7];
P3=seg[i+4];
a4=1;
delay(63500);
a4=0;
delay(63500);
}
a4=1;
a5=0;
for(i=0;i<3;i++)
{ P1=seg[i+7];
P3=seg[i+7];
delay(63500);delay(63500);
}
a5=1;
a3=1;
}
}
#include <reg51.h>
void delay(unsigned int j)
{
while(--j);
}
sbit a1=P1^0;
sbit a2=P1^1;
sbit a3=P1^2;
sbit a4=P1^3;
sbit a5=P1^4;
sbit a6=P1^5;
sbit a7=P1^6;
void main()
{
if(a5==0)
{
a1=0;a3=0;
delay(63500);
a1=1;a3=1;
delay(63500);
}
if(a7==0)
{
a2=a4=0;
delay(63500);
a2=a4=1;
delay(63500);
}
}
晶振
#include <REGX51.H>
delay(unsignedint j){
while(--j);
}
void main(void){
while(1)
{
P1=0xfe;
delay(65300);
P1=0xff;
delay(65300); }
//while(1);
}