程序为网上收集,供大家学习和参考。
下面贴出来的程序的内容如下:
AD程序实现模拟量到数字量的转换功能;
CAN程序实现CAN总线通讯功能;
keyboard_check程序实现键盘的扫描查询方式输入;
keyboard_disturb程序实现PORTB的"电平变化中断"进行键盘的输入;
led0-8程序实现在8个LED上依次显示1~8数字;
PWM程序用于使CCP1模块产生分辨率为10位的PWM波形,占空比为50%;
RS-232程序通过RS-232接口来完成PC计算机与单片机之间的通信;
simple_POARD程序为外围功能模块简单应用实例,点亮与PORTD口相连的八个发光二极管;
stopwatch程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度为0.01秒;
switchinput程序用于开关量的输入(采用SPI总线),并显示在与D口相连的LED上;
wakeup程序实现PIC18F458的休眠工作方式,并由实验板上的按键产生"电平变化中断"将其从休眠状态中激活;
WDT程序实现"看门狗"WDT的功能;
Yejing程序实现液晶显示器的接口和显示功能。
//该程序用于在8个LED上依次显示1~8
#include "p18f458.h"
static volatile int table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
volatile unsigned char data;
/*初始化子程序*/
void initial()
{
TRISA=0x00; /*A口设置为输出*/
TRISC=0x00; /*SDO引脚为输出,SCK引脚为输出*/
INTCON=0x00; /*关闭所有中断*/
SSPCON1=0x30; /*SSPEN=1;CKP=1,FOSC/4*/
SSPSTAT=0xC0; /*时钟下降沿发送数据*/
PIR1=0; /*清除SSPIF标志*/
}
/*显示子程序*/
void SPILED(char data)
{
PORTAbits.RA5=0; /*LACK送低电平,为锁存做准备*/
SSPBUF=data; /*启动发送*/
do
{
;
}while(PIR1bits.SSPIF==0); /*等待发送完毕*/
PIR1bits.SSPIF=0; /*清除SSPIF标志*/
PORTAbits.RA5=1; /*最后给锁存信号,代表显示任务完成*/
}
/*主程序*/
main()
{
unsigned i;
initial(); /*系统初始化*/
for(i=8;i>0;i--) /*连续发送8个数据*/
{
data=table; /*通过数组的转换获得待显示的段码*/
SPILED(data); /*发送显示段码显示*/
}
for(;;)
{
}
} |