51单片机 三原色调试光谱实例

时间:2024.4.13

#include <reg51.h>

sbit a=P1^3;

sbit b=P1^4;

sbit c=P1^5;

char fla;

#define SDA_HIGH SDA=1

#define SDA_LOW SDA=0

#define SCL_LOW SCL=0 //SCL=1

#define SCL_HIGH SCL=1

uint8 C_Loop=0;

uint8 MoudleAmount=2;

void delay_ms(unsigned int ms)

{

volatile unsigned int i=0;

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

}

/************ generation clock *********************/ void ClkProduce(void)

{

SCL_LOW; // SCL=0

delay_ms(20);

SCL_HIGH; // SCL=1

delay_ms(20);

}

/********** send 32 zero ********************/ void Send32Zero(void)

{

unsigned char i;

SDA_LOW; // SDA=0

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

{

ClkProduce();

}

}

/********* invert the grey value of the first two bits ***************/ uint8 TakeAntiCode(uint8 dat) { uint8 tmp = 0; tmp=((~dat) & 0xC0)>>6; return tmp; } /****** send gray data *********/ void DatSend(uint32 dx) { uint8 i; for (i=0; i<32; i++) { if ((dx & 0x80000000) != 0) { SDA_HIGH; // SDA=1; } else { SDA_LOW; // SDA=0; } dx <<= 1; ClkProduce(); } } /******* data processing ********************/ void DataDealWithAndSend(uint8 r, uint8 g, uint8 b) { uint32 dx = 0; dx |= (uint32)0x03 << 30; // The front of the two bits 1 is flag bits dx |= (uint32)TakeAntiCode(b) << 28;

dx |= (uint32)TakeAntiCode(g) << 26;

dx |= (uint32)TakeAntiCode(r) << 24;

dx |= (uint32)b << 16;

dx |= (uint32)g << 8;

dx |= r;

DatSend(dx);

}

void RED()

{

Send32Zero();

DataDealWithAndSend(100,0,0); // display red

// DataDealWithAndSend(1,100,0);

Send32Zero();

delay_ms(60000); // four delay_ms() about 1s delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

}

void PINK()

{

Send32Zero();

DataDealWithAndSend(205,5,0); // display green

// DataDealWithAndSend(0,100,0);

Send32Zero();

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

}

void YELLOW()

{

Send32Zero();

// for(j=0;j<MoudleAmount;j++)

// {

DataDealWithAndSend(255,0,30); // display blue // }

Send32Zero();

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

}

void GREEN()

{

Send32Zero();

// // // } // // //

for(j=0;j<MoudleAmount;j++) { DataDealWithAndSend(0,0,100); // display white } Send32Zero(); delay_ms(60000); delay_ms(60000); delay_ms(60000); delay_ms(60000); void CYAN() { Send32Zero(); DataDealWithAndSend(30,160,100); // display green DataDealWithAndSend(0,100,0); Send32Zero(); delay_ms(60000); delay_ms(60000); delay_ms(60000); delay_ms(60000); } void BLUE() { Send32Zero(); DataDealWithAndSend(0,100,0); // display green DataDealWithAndSend(0,100,0); Send32Zero(); delay_ms(60000); delay_ms(60000); delay_ms(60000); delay_ms(60000); } void WHILE() { Send32Zero(); DataDealWithAndSend(255,225,255); // display green DataDealWithAndSend(0,100,0); Send32Zero(); delay_ms(60000); delay_ms(60000); delay_ms(60000); delay_ms(60000); } void COLORFUL()

{

Send32Zero();

DataDealWithAndSend(205,15,30); // display green // DataDealWithAndSend(0,100,0);

Send32Zero();

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

}

void OFF()

{

Send32Zero();

DataDealWithAndSend(0,0,0); // display green // DataDealWithAndSend(0,100,0);

Send32Zero();

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

}

void RGB_LED(uint8 Color_R,uint8 Color_G,uint8 Color_B) {

char i,j;

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

{

Send32Zero();

DataDealWithAndSend(Color_R,Color_B,0); //The Color_B Color_G is between 0 and 255.

DataDealWithAndSend(0,Color_B,Color_G); Send32Zero();

if(C_Loop==0)

{

Color_R+=20; if(Color_R>=(R_MAX-15))

{

C_Loop++;

Color_R=155;

} value of Color_R

} if(C_Loop==1) { Color_G+=20; if(Color_G>=(G_MAX-15)) { Color_G=155; C_Loop++; } } if(C_Loop==2) { } Color_B+=20; if(Color_B>=(B_MAX-15)) { C_Loop++; Color_B=155; } if(C_Loop==3) { C_Loop%=3; Color_R=0; Color_G=0; Color_B=0; } delay_ms(60000); delay_ms(60000); delay_ms(60000); delay_ms(60000); } Color_R=0; Color_G=0;

Color_B=0;

C_Loop=0;

Send32Zero();

for(j=0;j<MoudleAmount;j++)

{

DataDealWithAndSend(0,0,0); // display off

}

Send32Zero();

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

delay_ms(60000);

}

void delay(int ms)

{

char t,j,z;

while(ms--);

for(t=0;t<=120;t++);

for(j=0;j<=120;j++);

for(z=0;z<=120;z++);

}

main()

{

// unsigned char i;

SCON=0x50; //设定串口工作方式

PCON=0x00; //波特率不倍增

TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率 EA=1;

ES = 1; //允许串口中断

TL1=0xfd;

TH1=0xfd; //波特率9600

TR1=1;

//IT0=1;

// EX0=1;

while(1)

{

if (fla==12) { RED();delay(10000);OFF(); RED();delay(10000);OFF(); RED();delay(10000);OFF(); RED();delay(500);OFF();RED();delay(500);OFF();RED();delay(500);OFF();

}

};

}

void io()interrupt 4

{

ES = 0; //关闭串行中断

RI = 0; //清除串行接受标志位

fla = SBUF;

switch(fla)

{

case 1: RED(); break;

case 2: PINK(); break;

case 3: GREEN(); break;

case 4: CYAN(); break;

case 5: BLUE(); break;

case 6: WHILE(); break;

case 7: COLORFUL(); break;

//case 8: break; //接受到5,第八个LED亮

default: WHILE(); break;

}

ES = 1; //允许串口中断

}


第二篇:51单片机调试过程


一、Keil运行过程

1、新建工程文件,选Atmel公司的AT89C52单片机;

2、新建文件file,new,保存(***.c)--后缀.C很重要;

3、右击“Target”选”options for target…”(下图)在OutPut中选中CreatHex;

1.JPG

二、Hex程序文件下载至单片机

1、 打开“驱动精灵”软件,插上单片机,安装驱动(USB2.0)。

2、 右击我的电脑—管理—设备管理器—看串口(一般是COM3或者COM5)

3、 打开下载程序软件;

QQ截图20130529101714.jpg

4、 软件设置;

QQ截图20130529102136.jpg

注意事项:MCU选择STC89C52,COM选择相应串口,打开文件,在单片机关闭情况下点download,提示上电时候再给单片机上电。

更多相关推荐:
单片机实验报告(基于51单片机)

滨江学院微机原理与接口技术综合实验报告题目:简易电子琴设计学号:学生姓名:XXX院系:滨江学院专业:指导教师:二OXX年月日【摘要】由于音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用…

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

51单片机实验报告

08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位...

51单片机实验报告

08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位显示10ms前两位显示秒数K1K2K3键分别启动停止清零按键操作不分先后实验程序流...

80C51单片机-实验报告

班级姓名学号单片机实验报告实验一CPU片内外清零1CPU片内RAM清零一实验目的掌握MCS51汇编语言的设计了解单片机的寻址方式以及调试方法二实验内容把单片机片内的30H7FH单元清零三实验框图四实验步骤用连续...

MCS51单片机原理及应用 实验报告

单片机原理与应用实验报告学校合肥工业大学姓名吕增威学号20xx2606班级计算机科学与技术0803班1目录前言3第一章MC51单片机原理及应用软件实验实验1系统认识实验6实验6数据排序实验验证性11第二章MC5...

李佛垚51单片机实验报告

实验报告实验名称矩阵键盘控制点阵的显示专业班级控制科学与工程学号s20xx0394学生姓名指导教师李晓林李丽宏牛昱光20xx年1月18日矩阵键盘控制点阵显示实验报告目录一实验目的1二实验内容1一扫描矩阵键盘读出...

51单片机电子时钟课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20xx级电工2班学号20xx401020xx2姓名王贞指导教师邹云峰提交日期20xx...

华中科技大学单片机实验实验报告MCS51单片机

华中科技大学单片机实验报告MCS51系列单片机单片机原理及应用实验根据20xx年电气与电子工程学院单片机实验课程改编专业电气工程及其自动化班级气卓1301姓名廖鹏毅学号ALLRIGHTRESERVED1目录实验...

实验一 51单片机流水灯实验 实验报告

流水灯实验报告一实验目的1了解单片机IO口的工作原理2掌握51单片机的汇编指令3熟悉汇编程序开发调试以及仿真环境二实验内容通过汇编指令对单片机IO进行编程本实验使用P0口以控制八个发光二极管以一定顺序亮灭即流水...

51单片机综合实验交通灯设计报告

51单片机综合实验交通灯设计报告班级学生姓名学号指导教师一实验题目交通灯控制系统设计二实验目的1学会用8051单片机开发简单的计算机控制系统2学会用汇编语言和C语言开发系统软件3学会8051单片机开发环境wav...

基于51单片机的步进电机控制系统-单片机课程设计报告

微机原理与接口技术课程设计报告基于51单片机的步进电机控制系统学号姓名班级20xx级电子2班华侨大学电子工程系摘要步进电机是将电脉冲信号变换成角位移或直线位移的执行部件步进电机可以直接用数字信号驱动使用非常方便...

51单片机实验报告(27篇)