您的当前位置:首页正文

单片机程序代码

2024-03-31 来源:步旅网


闪烁灯一

/***********************************************************************/

#include

#define uchar unsigned char //这里用\"uchar\"代替\"unsigned char\",\"uchar\"用来定义无符号字符型数。

#define uint unsigned int //\"uint\"用来定义无符号整型数。

sbit Show_LED = P0^0; KEIL专门用来声明某位IO口

//用来声明P0.0口为程序所要控制的端口,\"sbit\"是

/********************************************************************

* 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del。这是通过软件延时,有一定误差。

* 输入 : del

* 输出 : 无

***********************************************************************/

void Delay(uint del)

{

uint i,j;

for(i=0; ifor(j=0; j<1827; j++) //这个是通过软件仿真得出的数

;

}

/********************************************************************

* 名称 : Main()

* 功能 : 实现灯的闪烁

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

P0 = 0xff; //关闭所有LED

while(1)

{

Show_LED = 1;

Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为 10ms * del.

Show_LED = 0;

Delay(20);

}

}

闪烁灯二

/**********************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

/********************************************************************

* 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del

* 输入 : del

* 输出 : 无

***********************************************************************/

void Delay(uint del)

{

uint i,j;

for(i=0; ifor(j=0; j<1827; j++)

;

}

/********************************************************************

* 名称 : Main()

* 功能 : 实现灯的闪烁

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

P0 = 0xff; //关闭所有LED

while(1)

{

/*下面四行用于控制LED每隔一个亮*/

P0 = 0xaa;

Delay(50);

P0 = 0x55;

Delay(50);

/*下面四行用于控制LED每隔一个亮*/

P0 = 0xcc;

Delay(50);

P0 = 0x33;

Delay(50);

/*下面四行用于控制LED 高四位 或者 低四位亮*/

P0 = 0x0f;

Delay(50);

P0 = 0xf0;

Delay(50);

/*下面八行用于控制LED的两次全亮 全灭*/

P0 = 0x00;

Delay(25);

P0 = 0xff;

Delay(25);

P0 = 0x00;

Delay(25);

P0 = 0xff;

Delay(25);

Delay(200); //延时两秒

}

}

流水灯一

/***********************************************************************/

#include

#include

#define uchar unsigned char

#define uint unsigned int

/********************************************************************

* 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del

* 输入 : del

* 输出 : 无

***********************************************************************/

void Delay(uint del)

{

uint i,j;

for(i=0; ifor(j=0; j<1827; j++)

;

}

/********************************************************************

* 名称 : Main()

* 功能 : 实现灯的闪烁

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

uchar i;

while(1)

{

P0 = 0x7f; for(i=0; i<7; i++) {

P0 = _cror_(P0, 1); Delay(15);

}

P0 = 0xfe;

//P0.7亮亮

//移位7次

//_crol_()这个函数在intrins.h中定义了,用于循环右移

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

{

P0 = _crol_(P0, 1); //用于循环左移

Delay(15);

}

}

}

流水灯二

/**********************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

/********************************************************************

* 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del

* 输入 : del

* 输出 : 无

***********************************************************************/

void Delay(uint del)

{

uint i,j;

for(i=0; ifor(j=0; j<1827; j++)

;

}

/********************************************************************

* 名称 : Main()

* 功能 : 实现灯的闪烁

* 输入 : 无

* 输出 : 无

* 说明 :也可以使用例1的的方法来关闭数码管

***********************************************************************/

void Main(void)

{

uchar i, temp;

while(1)

{

temp = 0x7f;

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

{

temp = temp >> 1; temp = temp | 0x80; P0 = temp; Delay(15); }

temp = 0xfe;

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

{

temp = temp << 1; temp = temp | 0x01; P0 = temp; Delay(15); //值右移一位

//把值赋给P0口

//延时0.15秒

//值左移一位

//把值赋给P0口

//延时0.15秒

}

}

}

数码管静态显示一

/**********************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

sbit KEY = P3^4; //独立按键的T0

/*下一行你可以试着把 code 去掉看看试验结果。 去掉后 table[] 会被存到 RAM 中,因为单片机的 RAM 比 ROM 小的多*/

/*所以,对于不会改变的值应该用 code 或者 #define 去定义,让这些固定值存到 ROM 中去*/

uchar code table[16] =

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

};

/*下一行的数组可以显示数值外,还可以显示数码管的点*/

uchar code table_d[16] =

{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

/********************************************************************

* 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del

* 输入 : del

* 输出 : 无

***********************************************************************/

void Delay(uint del)

{

uint i,j;

for(i=0; ifor(j=0; j<1827; j++)

;

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void main()

{

uchar i = 0;

//P2=0xff;

P2=2;

while(1)

{

P0 = table[i % 16]; //在这里取 i 的个位数,不带点显示

//P0 = table_d[i % 16]; //带点显示

if(KEY == 0)

{

Delay(1); //软件消抖,试验为20ms

if(KEY == 0)

{

i++;

}

Delay(50); //延时0.5秒后进行下一次的按键检测

}

}

}

数码管静态显示二(锁存器)

/*************************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

sbit KEY = P3^4; //独立按键的T0

sbit KEY_Lock = P3^2; //这里,按了该按键后,实现解锁和开锁。

sbit LOCK = P3^7; //锁存功能

/*下一行你可以试着把 code 去掉看看试验结果。 去掉后 table[] 会被存到 RAM 中,因为单片机的 RAM 比 ROM 小的多*/

/*所以,对于不会改变的值应该用 code 或者 #define 去定义,让这些固定值存到

ROM 中去*/

uchar code table[16] =

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*下一行的数组可以显示数值外,还可以显示数码管的点*/

uchar code table_d[16] =

{0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

/********************************************************************

* 名称 : Delay()

* 功能 : 延时,延时时间为 10ms * del

* 输入 : del

* 输出 : 无

***********************************************************************/

void Delay(uint del)

{

uint i,j;

for(i=0; ifor(j=0; j<1827; j++)

;

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void main()

{

uchar i = 0;

LOCK = 1;

//P2=0xff;

while(1)

{

P0 = table[i % 16]; //在这里取 i 的个位数,不带点显示

//P0 = table_d[i % 16]; //带点显示

if(KEY == 0)

{

Delay(1); //软件消抖,试验为20ms

if(KEY == 0)

{

i++;

}

Delay(50); //延时0.5秒后进行下一次的按键检测

}

if(KEY_Lock == 0)

{

Delay(1); if(KEY_Lock == 0)

{

LOCK = !LOCK;

}

Delay(50); } }

//软件消抖,试验为20ms

//延时0.5秒后进行下一次的按键检测

}

数码管动态显示

/***********************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

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

uchar code LED_W[8] = {0,1,2,3,4,5,6,7};

/********************************************************************

* 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x

* 输入 : x (延时一毫秒的个数)

* 输出 : 无

***********************************************************************/

void Delay(uint i)

{

uchar x,j;

for(j=0;jfor(x=0;x<=148;x++);

}

/********************************************************************

* 名称 : Main()

* 功能 : 数码管的显示

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

while(1)

{

P0 = table[1]; P2 = LED_W[6]; Delay(3);

P0 = table[2]; P2 = LED_W[7]; Delay(3);

}

}

// i 值的 个位数

//点亮第一位数码管

// i 值的 个位数

//点亮第一位数码管

数码管滚动显示

/********************************************************************

* 文件名 : 动态显示.c

* 描述 :

* 创建人 : 东流,2009年8月30日

* 版本号 : 1.0

***********************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

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

uchar code LED_W[8] = {0,1,2,3,4,5,6,7};

uint Time_temp = 0, LED_temp = 0;

/********************************************************************

* 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x

* 输入 : x (延时一毫秒的个数)

* 输出 : 无

***********************************************************************/

void Delay(uint i)

{

uchar x,j;

for(j=0;jfor(x=0;x<=148;x++);

}

/********************************************************************

* 名称 : Time0_Init()

* 功能 : 定时器的初始化,11.0592MZ晶振,50ms

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Time0_Init()

{

TMOD = 0x01;

IE = 0x82;

TH0 = 0x4c;

TL0 = 0x00;

TR0 = 1;

}

/********************************************************************

* 名称 : Time0_Int()

* 功能 : 定时器中断,中断中实现 Count 加一

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Time0_Int() interrupt 1

{

TH0 = 0x4c;

TL0 = 0x00;

Time_temp++;

if(Time_temp == 4) 变一次

//定时器溢出时间50毫秒,隔0.2秒,数码管的数据改

{

LED_temp++;

Time_temp = 0;

}

}

/********************************************************************

* 名称 : Main()

* 功能 : 数码管的显示

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

uchar i = 0,j = 0;

Time0_Init();

while(1)

{

P0 = table[(i + LED_temp) % 8]; //数码管段值

P2 = LED_W[j]; Delay(2);

j++;

i++;

if(j == 8) {

j = 0;

i = 0;

}

}

//点亮某一位数码管

//每个数码管都点亮了一次。

}

数码管字符动态显示

/*********************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

//uchar code table[8] = {0x00,0x00,0x00,0x00,0x73,0x77,0x6d,0x6d}; PASS编码

//显示

uchar code table[8] = {0x00,0x00,0x00,0x76,0x79,0x38,0x38,0x3f}; //显示HELL0编码

uchar code LED_W[8] = {0,1,2,3,4,5,6,7};

/********************************************************************

* 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x

* 输入 : x (延时一毫秒的个数)

* 输出 : 无

***********************************************************************/

void Delay(uint i)

{

uchar x,j;

for(j=0;jfor(x=0;x<=148;x++);

}

/********************************************************************

* 名称 : Main()

* 功能 : 数码管的显示

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main(void)

{

uchar i = 0,j = 0;

while(1)

{

P0 = table[i]; P2 = LED_W[j]; Delay(2);

j++;

i++;

if(j == 8) //数码管段值

//点亮某一位数码管

//每个数码管都点亮了一次。

{

j = 0;

i = 0;

}

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容