- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模拟彩灯控制
模拟彩灯,开发板从左至右 4个按键分别为 S1-S4,从上至下8个灯为L1-L8,按下S1键8 只LED小灯以1HZ频率闪烁,按下S2键8只灯奇偶交替点亮, 间隔0.3S,按下S3键,L1-L4 与L5-L8灯交替点亮,间隔 0.2s,按下S4键熄灭所有灯。
硬件框图软件功能模块图
硬件框图
霧灯模式输岀
8LEDW输出
定时巾断子程序
单片机最小系统4按键输入
单片机最小系统
4按键输入
TO定时50ms中断子程序流程图
TO定时50ms中断
子程序流程图
P1取反闪烁
中断返回
#defi ne S1 OxOe
#defi ne S2 0x0d
#defi ne S3 OxOb
#defi ne S4 0x07
un sig ned char coun t,TH,TL;
void delay (un sig ned int t)
{
un sig nedin ti,j;
for(i=0;it;i++) // 延时 t 个 1ms
for(j=0;j112;j++); // 延时约 1ms
}
〃4个简单按键扫描子程序
un sig ned char Scan Key(void) {
un sig ned char key;
if((P30x0f)==0x0f) return(Oxff); delay(30);
if((P30x0f)==0x0f) return(0xff); key=P30x0f;
while((P30x0f)!=0x0f);// 等待弹出
//beep();
return(key);
}
void initTimer(void)// 定时计数器初始化子程序
{
TMOD=0x1;
TH0=0x4c;
TL0=0xf7;
}
void timer0(void) interrupt 1// 定时计数器中断子程序
{
TH0=TH; //定时计数器重赋初值
TL0=TL;
count++;
if(count==10)
{
count=0;
P1=~P1;
}
}
void main(void)
{
initTimer(); // 定时计数器初始化子程序,定时 50ms
TR0=1;
ET0=1;
EA=1;
while(1)
{
unsigned char KeyValue;
P3=0xff;
KeyValue=Sca nKey();/牍 入键值
switch(KeyValue)
{
case S1: TH=0x4C;TL=0xf7;P仁OxOO;EA=1; break; // 定时 50ms,对应的初始值
case S2: TH=0x94;TL=0x94;P仁0x55;EA=1; break; // 定时 30ms,对应的初始值
case S3: TH=0xb8;TL=0x63;P仁OxfO;EA=1; break; // 定时 20ms,对应的初始值 case S4: P1=0xff;EA=0;break;
default: break;
}
}
}
文档评论(0)