1. 用单片机实现流水灯 (1) 在新建一个工程后,首先应该想出该如何实现你想要的效果,然后写出程序的大致结构框架。 (2) 首先将每次只让一个小灯亮用16进制表示,例:只让最左边的小灯亮,即是11111110,16进制即是0xFE。其次让每个小灯依次闪烁只需在每个小灯亮之间添加一个延时程序。 (3) 若将8个依次列出会使程序繁琐,所以有一个简单方法: P0 = ~(0x80 >> cnt); //先写出反码,然后按位取反. (4) 代码: #include <STC12C5A60S2.H> //循环流水灯
sbit ENLED = P1^1;
void main() { unsigned int i = 0; unsigned char t = 0; unsigned char cnt = 0; P20 = 0; //使三极管导通的三个引脚赋值 P21 = 1; P22 = 1; ENLED= 0; //使74HC245芯片工作 while(1) { P0 = ~(0x01 << cnt); //设置P0各引脚初值并按位取反 for(i=0;i<60000;i++); //非精确延时 cnt++; if(cnt >= 8) //8个小灯按顺序亮后, { cnt = 0 ; //cnt清零,重新开始 } } } 2. 用Debug计算非精确延时for语句的时间 (1)点击如图所示红圈中的符号 (2)设置晶振为32,在debug中勾选Use Simulator (3)点击Start/Stop debug section可以打开或者关闭这个界面,在代码14行和16行设置两个断点。 (4)点击Run,程序运行到第一个断点。时间如下。 (5)再次点击Run,程序运行到第二个断点,时间如上。点击restart可以重新开始。 (6)两次时间相减,即可得到延时for语句的时间。 通过Debug还可以观察程序运行情况,更多的功能有待探索。
|