单片机C语言程序设计实训99例.doc
- 文档编号:2490047
- 上传时间:2022-10-30
- 格式:DOC
- 页数:77
- 大小:1.92MB
单片机C语言程序设计实训99例.doc
《单片机C语言程序设计实训99例.doc》由会员分享,可在线阅读,更多相关《单片机C语言程序设计实训99例.doc(77页珍藏版)》请在冰豆网上搜索。
《单片机C语言程序设计实训99例》—青岛大学
《单片机C语言程序设计实训99例》案例
第01篇基础程序设计
09555定时器实验
/* 名称:
555定时器实验
说明:
调节外部电阻RV1可改变延时值,从而影响灯点亮延时和发声延时。
*/
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitSignal=P1^0;
sbitBEEP=P3^7;
//延时
voidDelayMS(uintms)
{
uchari;
while(ms--)for(i=0;i<120;i++);
}
//主程序
voidmain()
{
while
(1)
{
if(Signal)
{
BEEP=~BEEP;
DelayMS(3);
}
}
}
10BCD译码数码管显示数字
/* 名称:
BCD译码数码管显示数字
说明:
BCD码经4511译码后输出数码管段码,实现数码管显示(4511驱动数码管)。
*/
#include
#defineucharunsignedchar
#defineuintunsignedint
//数码管位码
ucharcodeDSY_Index[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//待显示数字(10为不显示)
ucharcodeBCD_CODE[]={2,0,1,0,10,3,10,5};
//延时
voidDelayMS(uintms)
{
uchari;
while(ms--)for(i=0;i<120;i++);
}
//主程序
voidmain()
{
uchark;
while
(1)
{
for(k=0;k<8;k++)
{
P2=DSY_Index[k];
P1=BCD_CODE[k];
DelayMS
(1);
}
}
}
11MAX7221控制数码管动态显示
/* 名称:
MAX7221控制数码管动态显示
说明:
本例用MAX7221控制8只数码管动态显示,这样大大减少了单片机引脚和机器时间的占用。
*/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDIN=P2^0;
sbitCSB=P2^1;
sbitCLK=P2^2;
ucharDisp_Buffer[]={2,0,1,5,10,5,10,9}; //显示缓冲,10为“-”
//延时
voidDelayMS(uintms)
{
uchari;
while(ms--)for(i=0;i<120;i++);
}
//写数据
voidWrite(ucharAddr,ucharDat)
{
uchari;
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初始化
voidInitialise()
{
Write(0x09,0xff); //编码模式地址0x090x00~0xff,为1的则位选通
Write(0x0a,0x07); //亮度地址0x0a0x00~0x0f,0x0f最亮
Write(0x0b,0x07); //扫描数码管个数地址0x0b,最多扫描8只数码管
Write(0x0c,0x01); //工作模式地址0x0c0x00:
关闭;0x01:
正常
}
//主程序
voidmain()
{
uchari;
Initialise(); //初始化
DelayMS
(1);
for(i=0;i<8;i++) //显示8个数码管
{
Write(i+1,Disp_Buffer[i]);
}
while
(1);
}
12LCD1602字符液晶滚动演示程序
//main.c
/* 名称:
LCD1602字符液晶滚动演示程序
说明:
K1~K3按钮分别实现液晶垂直或水平滚动显示及暂停与继续控制。
*/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidInitialize_LCD();
voidDelayMS(uintms);
voidShowString(uchar,uchar,uchar*);
sbitK1=P3^0;
sbitK2=P3^1;
sbitK3=P3^2;
ucharcodePrompt[]="PressK1-K3ToStartDemoProg";
//待滚动显示的信息段落,每行不超过80个字符,共6行
ucharconstLine_Count=6;
ucharcodeMsg[][80]=
{
"ManyCADusersdismissschematiccaptureasanecessaryevilinthe",
"processofcreatingPCBlayoutbutwehavealwaysdisputedthispoint",
"ofview.WithPCBlayoutnowofferingautomationofbothcomponent",
"canoftenbethemosttimeconsumingelementoftheexercise.",
"Andifyouusecircuitsimulationtodevelopyourideas,",
"youaregoingtospendevenmoretimeworkingontheschematic."
};
//显示缓冲(2行)
ucharDisp_Buffer[32];
//垂直滚动显示
voidV_Scroll_Display()
{
uchari,j,k=0;
uchar*p=Msg[0];
uchar*q=Msg[Line_Count]+strlen(Msg[Line_Count]);
//以下仅使用显示缓冲的前16字节空间
while(p { for(i=0;i<16&&p { //消除显示缓冲中待显示行首尾可能出现的空格 if((i==0||i==15)&&*p=='')p++; if(*p! ='\0') { Disp_Buffer[i]=*p++; } else { if(++k>Line_Count)break; p=Msg[k]; //p指向下一串的首地址 Disp_Buffer[i]=*p++; } } //不足16个字符时空格补充 for(j=i;j<16;j++)Disp_Buffer[j]=''; //垂直滚动显示 while(F0)DelayMS(5); ShowString(0,0,""); DelayMS(150); while(F0)DelayMS(5); ShowString(0,1,Disp_Buffer); DelayMS(150); while(F0)DelayMS(5); ShowString(0,0,Disp_Buffer); ShowString(0,1,""); DelayMS(150); } //最后清屏 ShowString(0,0,""); ShowString(0,1,""); } //水平滚动显示 voidH_Scroll_Display() { uchari,j,k=0,L=0; uchar*p=Msg[0]; uchar*q=Msg[Line_Count]+strlen(Msg[Line_Count]); //将32个字符的显示缓冲前16个字符设为空格 for(i=0;i<16;i++)Disp_Buffer[i]=''; while(p { //忽略缓冲中首尾可能出现的空格 if((i==16||i==31)&&*p=='')p++; for(i=16;i<32&&p { if(*p! ='\0') { Disp_Buffer[i]=*p++; } else { if(++k>Line_Count)break; p=Msg[k]; //p指向下一串的首地址 Disp_Buffer[i]=*p++; } } //不足32个字符时空格补充 for(j=i;j<32;j++)Disp_Buffer[j]=''; //水平滚动显示 for(i=0;i<=16;i++) { while(F0)DelayMS(5); ShowString(0,L,Disp_Buffer+i); while(F0)DelayMS(5); DelayMS(20); } L=(L==0)? 1: 0; //行号在0,1间交替 DelayMS(300); } //如果显示结束时停留在第0行,则清除第1行的内容 if(L==1)ShowString(0,1,""); } //外部中断0,由K3控制暂停与继续显示 voidEX_INT0()interrupt0 { F0=! F0; //暂停与继续显示控制标志位 } //主程序 voidmain() { uintCount=0; IE=0x81; //允许外部中断0 IT0=1; //下降沿触发 F0=0; //暂停与继续显示控制标志位 Initialize_LCD(); ShowString(0,0,Prompt); ShowString(0,1,Prompt+16); while (1) { if(K1==0) { V_Scroll_Display(); DelayMS(300); } else if(K2==0) { H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言程序设计 99