woshixy1 发表于 2025-1-17 02:46:35

ai8051U视频学习打卡

<p>之前有学习过 stc89c52rc这个芯片 自己做了一些有趣的小项目 这次又想做 一个新的项目 因为知识量不够 就来论坛学习 没想到现在stc已经发展的这么牛了 真的非常开心和为祖国自豪</p>
<p>刚好看到有活动 而且我确实也需要学习这个芯片 简直事太棒了 我看是要先学3课再申请试验箱</p>
<p>特此前来学习并且打卡</p>
<p>开头那句话真的非常振奋人心</p>
<p><strong>哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!</strong></p>
<p>交流Q群:884047237</p>
<p><img src="data/attachment/forum/202501/17/023713tn11mvjrnmropi66.jpg" alt="1.jpg" title="1.jpg" /></p>
<p>第一课 简单功能展示和简介</p>
<p><img src="data/attachment/forum/202501/17/023736znle2yb5zzyeu3pw.jpg" alt="2.jpg" title="2.jpg" /></p>
<p>主要特点如下</p>
<p>1屏幕显示和视频播放 优化QSPI和Flash读写功能<br />
可以让图像刷新非常快 可以播放视频 非常连贯</p>
<p>具体操作看 图3图4</p>
<p>2 I2s的录放音功能做全了</p>
<p>3PWM_DMA 更好的兼容了<br />
可同时控制1000多颗2812的灯</p>
<p>4频谱分析仪 有了硬件浮点乘除单元可更好的实现<br />
用I2s的录放音实现主要是运算非常快实时显示</p>
<p>5手写计算器<br />
主要是手写输入</p>
<p>6QSPI,PWM移相 硬件乘除 单精度浮点</p>
<p>图3 播放flash要选串行flash编辑器</p>
<p><img src="data/attachment/forum/202501/17/024253i3sdsdh372l7xb4f.jpg" alt="3.jpg" title="3.jpg" /></p>
<p>图4 选读取ID然后拆除芯片 点打开多文件 软件就能自动给上传 最后点编程数据</p>
<p><img src="data/attachment/forum/202501/17/024337xmu9u5o5o99k5o6u.jpg" alt="4.jpg" title="4.jpg" /></p>
<p>芯片加载程序之后就能自动播放视频了 而且画面还很流畅!</p>
<p>简介如下 我太久没有接触这些了 现在都内置usb了 而且内存和程序存储空间都很大!太方便了!</p>
<p><img src="data/attachment/forum/202501/17/023753wwkskmsuvcsl9sj6.jpg" alt="5.jpg" title="5.jpg" /></p>
<p>最后我想问一下 这个丝印上面是stc8051u 和 ai8051u 有什么区别吗?是不是只是改了一些丝印呢 因为我没有找到 stc8051u的数据手册</p>

tianjing818 发表于 2025-1-17 07:28:41

{:qiang:}

lgnstar 发表于 2025-1-17 08:27:04

{:qiang:}

woshixy1 发表于 2025-1-17 17:53:43

<p>学习完了第二课了</p>
<p>还是那句话</p>
<p><strong>哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!</strong></p>
<p>首先看一下 开发板箱的硬件</p>
<p>整体</p>
<p><img src="data/attachment/forum/202501/17/174054x7661oniihnqbzb1.jpg" alt="1.jpg" title="1.jpg" /></p>
<p>然后是具体的硬件介绍 正面</p>
<p><img src="data/attachment/forum/202501/17/174124lgmkkdkycjqdgsgk.jpg" alt="2.jpg" title="2.jpg" /></p>
<p>集成的功能还挺多的 就是外围的一些器件没有 比如link1d和示波器表笔还有小屏幕 不过后期再买也行无所谓了</p>
<p>然后看看背面</p>
<p><img src="data/attachment/forum/202501/17/174229f2j1ylvee12ssg9i.jpg" alt="3.jpg" title="3.jpg" /></p>
<p>然后是软件部分了</p>
<p><img src="data/attachment/forum/202501/17/174312xtbnwbwndxtnnstt.jpg" alt="4.jpg" title="4.jpg" /></p>
<p>安装一个编程软件和2个扩展 最后下载一些周边资料</p>
<p>去stc官网下载</p>
<p><img src="data/attachment/forum/202501/17/174611vvgr0hf008xkrvg4.jpg" alt="5.jpg" title="5.jpg" /></p>
<p>按keil<br />
按isp最新版 可以添加头文件<br />
要不再keil创建工程的时候 没有对应的u的型号<br />
我之前就没有安装 工程没法创建</p>
<p>keil专断插件扩展用 因为这个u的中断很多原始的不支持</p>
<p>最后下载实验包和手册这些资料</p>
<p>安装C251 根据图片教程做 可以联系销售经理要 论坛也行</p>
<p>用isp添加头文件</p>
<p><img src="data/attachment/forum/202501/17/174757ws2saamc0po2jy2o.jpg" alt="6.jpg" title="6.jpg" /></p>
<p><img src="data/attachment/forum/202501/17/174652abg192lqq2rtk9in.jpg" alt="7.jpg" title="7.jpg" /></p>
<p><img src="data/attachment/forum/202501/17/174652pcymylz427226om7.jpg" alt="8.jpg" title="8.jpg" /></p>
<p>添加中断</p>
<p><img src="data/attachment/forum/202501/17/174855snvnr1ymnngnqf81.jpg" alt="10.jpg" title="10.jpg" /></p>
<p><img src="data/attachment/forum/202501/17/174855ymipddc5dhdz0aw8.jpg" alt="9.jpg" title="9.jpg" /></p>
<p>下载资料包 里面有开发箱的说明和试验实例</p>
<p><img src="data/attachment/forum/202501/17/175016hmz08nnj7qn0499n.jpg" alt="11.jpg" title="11.jpg" /><br />
下载第一个程序</p>
<p><img src="data/attachment/forum/202501/17/175043r2imrkgjr0t2z3t4.jpg" alt="12.jpg" title="12.jpg" /></p>
<p>给单片机烧录程序<br />
先连usb和电脑</p>
<p><img src="data/attachment/forum/202501/17/175125gzrryf4as92srsyy.jpg" alt="13.jpg" title="13.jpg" /></p>
<p>再选好对应的u的型号 然后 按p32拉低电平</p>
<p><img src="data/attachment/forum/202501/17/175140itqv3t3n3nvu57gv.jpg" alt="14.jpg" title="14.jpg" /></p>
<p>再给单片机断电 就有 ubs写入的口了</p>
<p><img src="data/attachment/forum/202501/17/175214h0o5j003z0j8qjv0.jpg" alt="15.jpg" title="15.jpg" /></p>
<p>根据文件 选 8还是32bit指令集</p>
<p><img src="data/attachment/forum/202501/17/175214o2fzwd8st8zwatuq.jpg" alt="16.jpg" title="16.jpg" /></p>
<p>irc 频率再代码里面找 再功能说明里面</p>
<p>点下载编程就行了 OK了</p>

woshixy1 发表于 2025-1-17 22:13:38

<p>第三课 点亮一个led</p>
<p>还是那句!</p>
<p><strong>哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!</strong></p>
<p>创建工作文件 Keil uVision里面</p>
<p><img src="data/attachment/forum/202501/17/215334bbzx0rzc4br4prr0.jpg" alt="1.jpg" title="1.jpg" /></p>
<p>选择工程 选新工程创建</p>
<p><img src="data/attachment/forum/202501/17/215425whr911h9rh4ff4zh.jpg" alt="2.jpg" title="2.jpg" /></p>
<p>当然这是我想做的工程 所以我起了这样的名字 工程的文件管理系统也是我个人的习惯</p>
<p><img src="data/attachment/forum/202501/17/215501kpfc33nfp3rrqksb.jpg" alt="3.jpg" title="3.jpg" /></p>
<p>配置工程用的u</p>
<p><img src="data/attachment/forum/202501/17/215602swr9clnlr98rduud.jpg" alt="4.jpg" title="4.jpg" /></p>
<p>ok之后 文件夹里面会多一些文件和文件夹</p>
<p><img src="data/attachment/forum/202501/17/215628g1z5ew7j1pkqu4k4.jpg" alt="5.jpg" title="5.jpg" /></p>
<p>点这三个方块可以配置工程文件的关系 每一个文件夹里面 都建立一个对应的 .c文件(直接再硬盘里面建立就行了)</p>
<p><img src="data/attachment/forum/202501/17/215700klmpnlgvt5l3kqdt.jpg" alt="6.jpg" title="6.jpg" /></p>
<p>配置好了之后 左侧就这样了</p>
<p><img src="data/attachment/forum/202501/17/215817klz5z5ec0zzyccrr.jpg" alt="7.jpg" title="7.jpg" /></p>
<p>我们要对工程 进行一些设置</p>
<p><img src="data/attachment/forum/202501/17/215844izna1w55wq2yrw8i.jpg" alt="8.jpg" title="8.jpg" /></p>
<p>根据手册设置 这四项</p>
<p><img src="data/attachment/forum/202501/17/215916m6f55bgj8t3lg5hj.jpg" alt="9.jpg" title="9.jpg" /></p>
<p>再把这两项设置了</p>
<p><img src="data/attachment/forum/202501/17/215957oapccckncucso9p3.jpg" alt="10.jpg" title="10.jpg" /></p>
<p>关于引用文件的符号解释</p>
<p><img src="data/attachment/forum/202501/17/220030cuodne5hbefwjft9.jpg" alt="11.jpg" title="11.jpg" /></p>
<p>用官方的isp软件生成一个 头文件 后面程序会调用 这里就生成这个 ai8051u.h方便后期调用</p>
<p><img src="data/attachment/forum/202501/17/220137q1sd3gb8llqqvpz7.jpg" alt="12.jpg" title="12.jpg" /></p>
<p>设置一下文字的标准 省的以后 是都乱码 我以前写的程序 中文注解就都是 乱码。。。。</p>
<p><img src="data/attachment/forum/202501/17/220253f58g24g2958kk595.jpg" alt="13.jpg" title="13.jpg" /></p>
<p>写程序 调用头文件 主函数和一个while循环 死循环</p>
<p><img src="data/attachment/forum/202501/17/220420ee08gjjlln4w6zcy.jpg" alt="14.jpg" title="14.jpg" /></p>
<p>语句放在不同位置的 意义是不一样的</p>
<p><img src="data/attachment/forum/202501/17/220511xnsgb6tusbm9sn44.jpg" alt="15.jpg" title="15.jpg" /></p>
<p>点亮第一个led的 程序 当然我现在还没有开发箱子 所以先截图视频的</p>
<p><img src="data/attachment/forum/202501/17/220553urkojjn774sjqs37.jpg" alt="16.jpg" title="16.jpg" /></p>
<p>这个我以前没有接触过 这里要给io口进行状态配置</p>
<p><img src="data/attachment/forum/202501/17/220702r863onv6toj6o36v.jpg" alt="17.jpg" title="17.jpg" /></p>
<p>在官方的软件里面 能看到 针脚的实际物理位置 这个很方便</p>
<p><img src="data/attachment/forum/202501/17/220742nogjy5t6fqddvzbq.jpg" alt="18.jpg" title="18.jpg" /></p>
<p>对于命令的解释 先要配置端口 在调用端口 不能直接上来就用 觉得有点麻烦</p>
<p><img src="data/attachment/forum/202501/17/221008zh4vgip5ahg441ll.jpg" alt="19.jpg" title="19.jpg" /></p>
<p>不过官方软件给了 自动生成配置端口的命令 这个比较方便</p>
<p>准双向可以满足绝大多数需求</p>
<p><img src="data/attachment/forum/202501/17/221107gg3za4s5assanc45.jpg" alt="20.jpg" title="20.jpg" /></p>
<p>我看了一下还有功能 脚的切换 我主要需要就是用 那些通信协议 我觉得这个很方便 不过 我没有找到 ai8051u这个系列 随便找了一个别的先演示一下</p>
<p><img src="data/attachment/forum/202501/17/221107rplocove5op1izcm.jpg" alt="21.jpg" title="21.jpg" /></p>

woshixy1 发表于 2025-1-19 02:36:55

<p>第四课 自动程序下载</p>
<p>还是那句话</p>
<p><strong>哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!</strong></p>
<p><img src="data/attachment/forum/202501/19/022623tceievu1ep9wxuwv.jpg" alt="1.jpg" title="1.jpg" /></p>
<p>isp软件设置</p>
<p><img src="data/attachment/forum/202501/19/022655ucifrciynckkzie0.jpg" alt="2.jpg" title="2.jpg" /></p>
<p>今天的主要任务</p>
<p><img src="data/attachment/forum/202501/19/022716x44m1bg24zojkg41.jpg" alt="3.jpg" title="3.jpg" /></p>
<p>要去官网下一下这个usb文件库</p>
<p><img src="data/attachment/forum/202501/19/022807bgg4s4o3ghg634s6.jpg" alt="4.jpg" title="4.jpg" />中断命令的作用区域和查询命令的作用区域</p>
<p>我个人感觉 中断模式是 u被动接受 扎寻模式是 u自己在需要的时候主动去查询</p>
<p><img src="data/attachment/forum/202501/19/022935ya2k77gqa762ezeg.jpg" alt="5.jpg" title="5.jpg" /></p>
<p>把这个头文件和lib文件 放在工程文件的根目录下面</p>
<p><img src="data/attachment/forum/202501/19/023031qnrxnox8p5oru2ra.jpg" alt="6.jpg" title="6.jpg" />在自己的工程里面 添加lib文件和头文件</p>
<p><img src="data/attachment/forum/202501/19/023106xjfsens67wyt7hv1.jpg" alt="7.jpg" title="7.jpg" /><br />
函数的查询功能</p>
<p><img src="data/attachment/forum/202501/19/023135r7w42bbp2w7bwvz2.jpg" alt="8.jpg" title="8.jpg" />参看示例程序 开始写代码</p>
<p><img src="data/attachment/forum/202501/19/023211k1tk13i613kf8iyq.jpg" alt="9.jpg" title="9.jpg" /><br />
u和电脑直接是有密码机制的 这里使用默认的 也可以自己去配置</p>
<p><img src="data/attachment/forum/202501/19/023257ke8lxc9c4fex3217.jpg" alt="10.jpg" title="10.jpg" /><br />
开启特殊功能寄存器 开启之后才能用这里是手册说明</p>
<p><img src="data/attachment/forum/202501/19/023348l3zkff5kdkntdkzn.jpg" alt="11.jpg" title="11.jpg" /></p>
<p>开启特殊功能寄存器 开启之后才能用</p>
<p><img src="data/attachment/forum/202501/19/023439yo97g77667og6j35.jpg" alt="12.jpg" title="12.jpg" /></p>
<p>设置不要 把没有调用的 函数作为警告</p>
<p><img src="data/attachment/forum/202501/19/023516nxbo6qbi11686iao.jpg" alt="13.jpg" title="13.jpg" />把p2口的led全部点亮</p>
<p><img src="data/attachment/forum/202501/19/023632tkns0hhv00v7shqi.jpg" alt="14.jpg" title="14.jpg" /></p>
<p>程序成功 也可以自动烧录了</p>

woshixy1 发表于 2025-1-19 22:05:01

<p>第五课</p>
<p>还是那句话</p>
<p><strong>哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!</strong></p>
<p><img src="data/attachment/forum/202501/19/215742zhzpzk7ees3n73rr.jpg" alt="1.jpg" title="1.jpg" /></p>
<p>这棵主要是学一些 c语言的基础知识 数据类型 运算符号 逻辑运算符号 数据类型这些 还有CDC 通讯</p>
<p><img src="data/attachment/forum/202501/19/215858gm9gucrh77kchbkt.jpg" alt="2.jpg" title="2.jpg" /><br />
这个我和视频里的不一样 估计是更新了 而且默认是开启的状态</p>
<p>直接可以调用printf函数</p>
<p><img src="data/attachment/forum/202501/19/215940l3ss8si817ii8nzs.jpg" alt="3.jpg" title="3.jpg" /><br />
#define的解释 就是替换一下名字</p>
<p><img src="data/attachment/forum/202501/19/220023z8d3p8bsacyydplb.jpg" alt="4.jpg" title="4.jpg" /><br />
这里就是一些 特殊的付好了 s是字符串变量 可以把输出的元素灵活话</p>
<p><img src="data/attachment/forum/202501/19/220116btvn42wtjcntdldv.jpg" alt="5.jpg" title="5.jpg" /><br />
这是示例的代码 就是收到了数据 就发这个设置好的 这段字符串</p>
<p><img src="data/attachment/forum/202501/19/220206ekcoswcolfz20yuk.jpg" alt="6.jpg" title="6.jpg" /><br />
关于这个cdc通讯的串口</p>
<p><img src="data/attachment/forum/202501/19/220245iawhq9398nzo5z9i.jpg" alt="8.jpg" title="8.jpg" /><br />
关于窗口的更多配置</p>
<p><img src="data/attachment/forum/202501/19/220310g7q3be2uhdqhytb3.jpg" alt="9.jpg" title="9.jpg" /><br />
这里有个新知识点 强制转换 这个学习到了</p>
<p><img src="data/attachment/forum/202501/19/220351aw5wy5jl6hviiy9x.jpg" alt="11.jpg" title="11.jpg" /></p>
<p><img src="data/attachment/forum/202501/19/220351ojbglbz81fj8olel.jpg" alt="10.jpg" title="10.jpg" /></p>
<p>各种运算符号 和 真假判断 非零都是真</p>
<p><img src="data/attachment/forum/202501/19/220438wkvi9f8p96uaupai.jpg" alt="12.jpg" title="12.jpg" /></p>
<p>我自己的代码设计</p>
<p><img src="data/attachment/forum/202501/19/220438mocf8opcp8f88sg8.jpg" alt="13.jpg" title="13.jpg" /></p>
<p>实验结果</p>

woshixy1 发表于 2025-1-20 03:04:36

<p>第六课</p>
<p><strong>哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!</strong></p>
<p><img src="data/attachment/forum/202501/20/025844jsfqhjjccbcsu4hk.jpg" alt="1.jpg" title="1.jpg" /></p>
<p>本节的概述</p>
<p><img src="data/attachment/forum/202501/20/025859dohbq5h42xzcrjs6.jpg" alt="2.jpg" title="2.jpg" /></p>
<p>gpio的状态 这个开漏模式不是很懂</p>
<p><img src="data/attachment/forum/202501/20/025955av0lvvblbi055b8v.jpg" alt="3.jpg" title="3.jpg" /></p>
<p>消除按键抖动 以及特殊功能寄存器配置</p>
<p>我自己写了代码 跑起来很奇怪 不知道为什么</p>
<p>我是擎天柱板子 不知道哪里出问题了</p>
<pre><code>#include &quot;ai8051u.h&quot;
#include &quot;stc32_stc8_usb.h&quot;
#include &quot;intrins.h&quot;   //

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = &quot;@STCISP#&quot;;
u8 xxx = 5;



void Delay10ms(u8 xx1)        //@24.000MHz
{
        unsigned long edata i;
        while(xx1)
        {
                _nop_();
                _nop_();
                _nop_();
                i = 59998UL;
                while (i) i--;
                xx1--;
        }

}


u8 anjian_check(void)
{
        u8 x=5;
        while(P32==0||P33==0)
        {
                Delay10ms(2);//@24.000MHz
                if(P32==0)
                {
                        x=1;
                }
                else if(P33==0)
                {
                        x=2;
                }

        }
        while(P32==0||P33==0)
        return x;
}



void main(void)
{

                WTST =0;//设置程序指令延时参数
                EAXFR =1;//扩展寄存器(XFR)访问使能
                CKCON=0;//提高访问XRAM速度
          P0M1 = 0x00;   P0M0 = 0x00;   //设置为推挽输出
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口


                P23= 1;
                P21= 1;
                usb_init();
                IE2 = 0x80;        //sub允许中断
                EA = 1; //总中断
                while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置

        while(1)
        {
                          if (bUsbOutReady)
      {
          //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
      
                                        printf(&quot;stc 真的很棒 \r\n&quot;);
      
                                usb_OUT_done();
       }
                                xxx = anjian_check();
                                if(xxx==1)
                                {
                                        printf(&quot;P32被按下了&quot;);
                                        P21= !P21;
                                        xxx=5;
                                }
                                else if(xxx==2)
                                {
                                        printf(&quot;P33被按下了&quot;);
                                        P23= !P23;
                                        xxx=5;
                                }
                                else
                                {
                                        continue;
      }
</code></pre>

woshixy1 发表于 2025-1-20 03:08:14

<p>串口这里一直在发数据</p>
<p><img src="data/attachment/forum/202501/20/030720u4y8xsqxbhfx1evq.jpg" alt="4.jpg" title="4.jpg" /></p>
<p>然后p21灯一直常亮</p>
<p>我估计这个脚是一直在翻转。。。</p>

woshixy1 发表于 2025-1-20 07:23:28

<p>第七课了</p>
<p>还是那句话</p>
<p><strong>哪怕梦想让我们拼的遍体鳞伤!这一次我们也要勇往直前!</strong></p>
<p><img src="data/attachment/forum/202501/20/070343ay2zea3c4hig2f4h.jpg" alt="1.jpg" title="1.jpg" /></p>
<p>介绍了定时器的作用 和运行的机制</p>
<p><img src="data/attachment/forum/202501/20/070408mpbkd2vpvfkz0rx8.jpg" alt="2.jpg" title="2.jpg" /></p>
<p>软件设置定时器</p>
<p><img src="data/attachment/forum/202501/20/070437izir99zvg7jj99c3.jpg" alt="3.jpg" title="3.jpg" /><br />
定时器运行的中断程序</p>
<p><img src="data/attachment/forum/202501/20/070538q371t1y07a6e1y84.jpg" alt="4.jpg" title="4.jpg" /></p>
<p>定时器开启的位置 后期我编程也是先声明了这个</p>
<p><img src="data/attachment/forum/202501/20/070624vfl5syx3eyrh993h.jpg" alt="5.jpg" title="5.jpg" /><br />
有的字符需要加这个符号才能正常显示</p>
<p><img src="data/attachment/forum/202501/20/070650bi1c4loic0x0lcic.jpg" alt="6.jpg" title="6.jpg" /><br />
函数的命名规则和意义</p>
<p>我按照课后作业写了程序 又遇到相同的问题了</p>
<p><img src="data/attachment/forum/202501/20/072004jbmi7r0y2ar5m3w5.png" alt="微信截图_20250120071942.png" title="微信截图_20250120071942.png" /></p>
<p>它一直侦测到 按键被按下了 我也很无语</p>
<p>也就是一直是按键2被按下的状态 我也很无语 大家帮我研究研究把</p>
<p>灯一直是亮的 就是总是刷新定时器的时间 根本不会灭</p>
<p>不管按那个键它都判断是 2号键被按下了 也就是P33</p>
<pre><code>#include &quot;ai8051u.h&quot;
#include &quot;stc32_stc8_usb.h&quot;
#include &quot;intrins.h&quot;

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = &quot;@STCISP#&quot;;

void Delay20ms(void);        //@24.000MHz

void Timer0_Init_1s(void);                //1秒@24.000MHz
void Timer0_Init_2s(void);                //2秒@24.000MHz

u8 anjian_check(void);

//void Timer0_Isr(void) interrupt 1;
u8 najian=0;
u8 najian_state=0;
u8 gongDe=0;
void main(void)
{
                WTST = 0;                                                                                //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
                EAXFR = 1;                                                                                 //扩展寄存器(XFR)访问使能
                CKCON = 0;                                                                           //提高访问XRAM速度

          P0M1 = 0x00;   P0M0 = 0x00;   //设置为推双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
                P32=1;
                P33=1;
                usb_init();
                IE2 = 0x80;        //sub允许中断
                EA = 1; //总中断
                while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置


//        while(1)
//        {
//                          if (bUsbOutReady)
//      {
//          //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
//      
//                                        printf(&quot;stc 真的很棒 \r\n&quot;);
//      
//                                        usb_OUT_done();
//      }
//       
//                        //P2=0;
//        }
        while(1)
        {
                najian = anjian_check();
                if(najian==1)
                {
                        najian_state = !najian_state;
                                if(najian_state)
                                {
                                        printf(&quot;功德单倍时间\r\n&quot;);
                                }
                                else
                                {
                                        printf(&quot;功德双倍时间\r\n&quot;);
                                }
       
                }
                if(najian==2)
                {
                        if(najian_state)
                        {
                                gongDe=gongDe+1;
                                printf(&quot;功德+1,当前功德:%d\r\n&quot;,(int)gongDe);
                                P2=0;
                                Timer0_Init_1s();                //1秒@24.000MHz
                        }
                        else
                        {
                                gongDe=gongDe+2;
                                printf(&quot;功德+2,当前功德:%d\r\n&quot;,(int)gongDe);
                                P2=0;
                                Timer0_Init_2s();                //2秒@24.000MHz
                        }
                }
        }
}






void Delay20ms(void)        //@24.000MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 119998UL;
        while (i) i--;
}


u8 anjian_check(void)
{
        u8 x=0;
        if(P32&amp;&amp;P33==0)
        {
                Delay20ms();        //@24.000MHz
                if(P32==0)
                {
                        x=1;
                }
                else
                {
                        x=2;
                }
        while(P32&amp;&amp;P33==1)
                {
                        Delay20ms();
                }
        }

        return x;
}






void Timer0_Init_1s(void)                //1秒@24.000MHz
{
        TM0PS = 0x1E;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &amp;= 0x7F;                        //定时器时钟12T模式
        TMOD &amp;= 0xF0;                        //设置定时器模式
        TL0 = 0xFC;                                //设置定时初始值
        TH0 = 0x03;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}


void Timer0_Init_2s(void)                //2秒@24.000MHz
{
        TM0PS = 0x3D;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &amp;= 0x7F;                        //定时器时钟12T模式
        TMOD &amp;= 0xF0;                        //设置定时器模式
        TL0 = 0xFC;                                //设置定时初始值
        TH0 = 0x03;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}


void Timer0_Isr(void) interrupt 1
{
        P2=1;                                                //关闭P2 LED
        TF0 = 0;                                //清除TF0标志
        ET0 = 0;                                //关闭定时器0中断
}




</code></pre>
页: [1] 2
查看完整版本: ai8051U视频学习打卡