- 1、本文档共54页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机电子设计制作彩色光立方设计方案
设计方案
本设计根据二极管点阵的原理由单片机I/O口控制点亮不同的二极管从而组成出不同的画面,根据人眼的视觉暂留现象即当物体移去时视觉神经对物体的印象不会立即消失而是要延续0.1-0.4秒的时间,来设置每幅画面的延迟时间是连续的一系列画面呈现动态。每一个层面的二极管阳极接在一起受一路I/O口的控制,实际电路中该路I/O口输出的控制信号通过5V继电器的吸合和断开来控制的,再输入发光二极管的阳极使其驱动。每一个二极管的阴极分别受单片机扩展后的I/O控制。每个灯都是由片选端口和控制端口共同决定亮或灭。因此,我们可以随意的来点亮光立方中任意一处的灯,来构建多种多样的图案。
/*
*程序功能:cube4光立方彩色版本,实现各种动画效果,配套取模软件
*作者:牛盾
*
*/
#include stc12c5a60s2.h
#include intrins.h
#define uint unsigned int
#define uchar unsigned char
#define MAX_Delay 8
#define MIN_Delay 1
sbit S_1 = P1 ^ 1;
sbit S_2 = P1 ^ 2;
unsigned int pwm;
unsigned char TimeDelay = 10;
unsigned char Mode = 1;
unsigned char code tabP2[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //扫描
uchar s=0;
void DELAY_MS (uchar i){
// unsigned int i;
// while( --a != 0){
// for(i = 0; i 600; i++);
// }
uchar x,j;
for(j=0;ji;j++)
for(x=0;x=148;x++);
}
void Adc_Delay (uint a){
uint i;
while( --a != 0){
for(i = 0; i 600; i++);
}
}
void Delay(uint z)
{
uint x,y;
for(x=80;x0;x--)
for(y=z;y0;y--);
}
void timer1_init()
{
TMOD |= 0x10;
TH1 = 0;
TL1 = 0;
ET1 = 1;
TR1 = 1;
EA = 1;
}
/*******************************************************************************
********************** AD转换函数 **************/
/******************************************************************************/
unsigned char Read (unsigned char CHA)
{
unsigned char AD_FIN=0; //存储A/D转换标志
CHA = 0x07; //选择ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x00; //ADC转换的速度(0XX0 0000 其中XX控制速度,请根据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //选择A/D当前通道
_nop_();
ADC_CONTR |= 0x80; //启动A/D电源
Adc_Delay(1); //使输入电压达到稳定(1ms即可)
ADC_CONTR |= 0x08; //启动A/D转换(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0)
{ //等待A/D转换结束
AD_FIN = (ADC_CONTR 0x10); //0001 0000测试A/D转换结束否
}
ADC_CONTR = 0xE7; //1111 0111 清ADC_FLAG位,
文档评论(0)