单片机C语言程序设计实训99例
《单片机C语言程序设计实训99例》案例
第 01 篇 基础程序设计
09 555定时器实验
/*名称:555定时器实验
说明:调节外部电阻RV1可改变延时值,从而影响灯点亮延时和发声延时。
*/
#include
#define uchar unsigned char
#define uint unsigned int
sbit Signal=P1^0;
sbit BEEP=P3^7;
//延时
void DelayMS(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
while(1)
{
if(Signal)
{
BEEP=~BEEP;
DelayMS(3);
}
}
}
10 BCD译码数码管显示数字
/*名称:BCD译码数码管显示数字
说明:BCD码经4511译码后输出数码管段码,实现数码管显示(4511驱动数码管)。
*/
#include
#define uchar unsigned char
#define uint unsigned int
//数码管位码
uchar code DSY_Index[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//待显示数字(10为不显示)
uchar code BCD_CODE[]={2,0,1,0,10,3,10,5};
//延时
void DelayMS(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//主程序
void main()
{
uchar k;
while(1)
{
for(k=0;k<8;k++)
{
P2=DSY_Index[k];
P1=BCD_CODE[k];
DelayMS(1);
}
}
}
11 MAX7221控制数码管动态显示
/*名称:MAX7221控制数码管动态显示
说明:本例用MAX7221控制8只数码管动态显示,这样大大减少了单片机引脚和机器时间的占用。
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit DIN=P2^0;
sbit CSB=P2^1;
sbit CLK=P2^2;
uchar Disp_Buffer[]={2,0,1,5,10,5,10,9};//显示缓冲,10为“-”
//延时
void DelayMS(uint ms)
{
uchar i;
while(ms--) for(i=0;i<120;i++);
}
//写数据
void Write(uchar Addr,uchar Dat)
{
uchar i;
CSB=0;
for(i=0;i<8;i++)
{
CLK=0;Addr<<=1;DIN=CY;
CLK=1;_nop_();_nop_();CLK=0;
}
for(i=0;i<8;i++)
{
CLK=0;Dat<<=1;DIN=CY;
CLK=1;_nop_();_nop_();CLK=0;
}
CSB=1;
}
//MAX7221初始化
void Initialise()
{
Write(0x09,0xff);//编码模式地址0x09 0x00~0xff,为1的则位选通
Write(0x0a,0x07);//亮度地址0x0a 0x00~0x0f,0x0f最亮
Write(0x0b,0x07);//扫描数码管个数地址0x0b,最多扫描8只数码管
Write(0x0c,0x01);//工作模式地址0x0c 0x00:关闭;0x01:正常
}
//主程序
void main()
{
uchar i;
Initialise();//初始化
DelayMS(1);
for(i=0;i<8;i++)//显示8个数码管
{
Write(i+1,Disp_Buffer[i]);
}
while(1);
}
12 LCD1602字符液晶滚动演示程序
//main.c
/*名称:LCD1602字符液晶滚动演示程序
说明:K1~K3按钮分别实现液晶垂直或水平滚动显示及暂停与继续控制。
*/
#include
#include
#define uchar unsigned char
#define uint unsigned in