完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
各位大家好,我这里有一个C语言程序,是用单片机给1804信号驱动LED的程序,我以前有学过单片机,但是对这个程序有些地方可以看懂,有些地方看不懂,所以求大家帮忙解读补充注视更好!谢谢! 这个MCU 型号:STC15F104E 晶震频率:33MHZ(内部时钟) 我从程序里面没有看到哪个语句说明时钟是33的,我如果把内部时钟设置为12MHZ或者其他频率,整个程序就不工作了! 以下我看不懂的地方我就用文字加以提问,懂的就不需要提问!希望朋友们根据问题一一解答,感谢! /*******************************************************************************/ #include #include "intrins.h" //包含nop指令头文件 #define nop _nop_(); //宏定义 这个是宏定义空操作指令,用于延时,我知道! /********************************定义控制端口***********************************/ ***it DO=P3^3; //定义信号输出DO /**********************************定义变量*************************************/ unsigned char IC=32; //控制TM1804个数 32PCS unsigned int LED_PX; //像素点数 unsigned char PWM=255; //TM1804灰度数据 unsigned char Rda,Gda,Bda; //R、G、B灰度数据 unsigned char bdata LED_data; //可位操作的数据发送暂存变量声明 ***it bit0=LED_data^0; //被发送的数据各位定义 ***it bit1=LED_data^1; ***it bit2=LED_data^2; ***it bit3=LED_data^3; ***it bit4=LED_data^4; ***it bit5=LED_data^5; ***it bit6=LED_data^6; ***it bit7=LED_data^7; bit flag=0; //定义一个标志位 /**********************************延时函数*************************************/ void delay(unsigned int n) //n=1,延时500us { unsigned int i; while(n--) for(i=0;i<860;i++); } /********************发送0码函数,高电平400ns,周期1.25us************************/ void send_data_0() { DO=1; nop;nop;nop;nop;nop; 这些工操作是干什么用?多了少了又有什么区别? nop;nop;nop;nop;nop; DO=0; nop;nop;nop;nop;nop;nop;nop; nop;nop;nop;nop;nop;nop;nop; } /*******************发送1码函数,高电平800ns,周期1.25us*************************/ void send_data_1() { DO=1; nop;nop;nop;nop;nop;nop; nop;nop;nop;nop;nop; nop;nop;nop;nop;nop;nop; nop;nop;nop;nop;nop; DO=0; } /***********************发送1个字节数据,高位先发*******************************/ void send_data(unsigned char DATA) { LED_data=DATA; if(bit7)send_data_1();else send_data_0(); if(bit6)send_data_1();else send_data_0(); if(bit5)send_data_1();else send_data_0(); if(bit4)send_data_1();else send_data_0(); if(bit3)send_data_1(); else send_data_0(); if(bit2)send_data_1(); else send_data_0(); if(bit1)send_data_1(); else send_data_0(); if(bit0)send_data_1();else send_data_0(); } /******************************发送1帧数据*************************************/ void send_px() { unsigned int i; for(i=0;i { send_data(Rda); //发送R灰度数据 send_data(Gda); //发送G灰度数据 send_data(Bda); //发送B灰度数据 } } /*===============================主函数=======================================*/ void main() { unsigned char i; LED_PX=IC; //像素点数等于TM1804个数 Rda=Gda=Bda=0; //R、G、B灰度数据复位清零 while(1) { for(i=0;i { Rda=i; //灰度计算 send_px(); //发送灰度数据 //delay(50); //复位延时 delay(5); //复位延时 } flag=1; //标志位置位 while(flag) //标志位置位后循环函数 { for(i=0;i { Gda=i; Rda=PWM-i; //灰度计算 send_px(); //发送灰度数据 //delay(50); //复位延时 delay(5); //复位延时 } for(i=0;i { Bda=i; Gda=PWM-i; //灰度计算 send_px(); //发送灰度数据 //delay(50); //复位延时 delay(5); //复位延时 } for(i=0;i { Rda=i; Bda=PWM-i; //灰度计算 send_px(); //发送灰度数据 //delay(50); //复位延时 delay(5); //复位延时 } } } } /*================================结束==========================================*/ |
|
相关推荐
1个回答
|
|
很多你的貼,但好像都沒有結的
nop;越多,延時越長; for(i=0;i 晶振不是在程序里設的,是下載的時候設定的 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2024年上海海思MCU开发者体验官招募,手机/MatePad大奖等你拿!
955 浏览 0 评论
【xG24 Matter开发套件试用体验】蓝牙控制板载LED
829 浏览 0 评论
978 浏览 0 评论
电赛:mspm0l1306的开发板可以烧录程序,但是程序运行不了,怎么解决这个问题?
1038 浏览 1 评论
【xG24 Matter开发套件试用体验】Silicon Labs 基于 EFR32MG24 Explorer Kit 开发板 开箱试用体验
823 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
10518 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-6 09:14 , Processed in 0.515788 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号