📄 testpromain.c
字号:
#include "reg52.h"
#include <intrins.h>
//typedef bit BOOL ;
#define uchar unsigned char
sbit D1=P2^0;
sbit D2=P2^1;
sbit D3=P2^2;
sbit D4=P2^3;
sbit CE573=P2^5;
sbit BEEP=P2^4;
sbit KEY1=P3^3;
sbit KEY2=P3^2;
sbit KEY3=P3^4;
sbit KEY4=P3^5;
sbit KEY5=P3^7;
#define SEL_D1 D1=0;
#define SEL_D2 D2=0;
#define SEL_D3 D3=0;
#define SEL_D4 D4=0;
#define REL_D1 D1=1;
#define REL_D2 D2=1;
#define REL_D3 D3=1;
#define REL_D4 D4=1;
sbit rs = P2^6 ;
sbit rw = P3^6 ;
sbit ep = P2^7 ;
void _delay(uchar) ;
void lcd_wcmd(uchar) ;
//BOOL lcd_bz() ;
void lcd_pos(uchar) ;
void lcd_wdat(uchar) ;
void display(uchar,uchar *) ;
//串口、中断、初始化设置子函数
//11.0592MH晶振下,波特率9600,无奇偶校验
void initmpu(void)
{
//定时器1的工作方式2
TMOD=0x20;
//装载计数初值
TL1=0xfd;
TH1=0xfd;
//采用串口工作方式1,无奇偶校验
SCON=0x50;
//串口波特率不加倍
PCON=0x00;
//开总中断,开串口中断
TR1=1;
IE=0x95;
}
void Delay(int m)
{
while(--m);
}
void test_led(void)
{
int i;
P1=0x7F;
Delay(40000);
for(i=0;i<7;i++)
{
P1=P1>>1;
Delay(40000);
}
P1=0xFF;
return;
}
code unsigned char digseg[]={
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // b
0xC6, // C
0xA1, // d
0x86, // E
0x8E, // F
};
void test_digseg(void)
{
char i;
CE573=1; //0
SEL_D1;
SEL_D2;
SEL_D3;
SEL_D4;
for(i=0;i<16;i++)
{
P0=digseg[i];
Delay(40000);
}
P0=0xFF;
Delay(50000);
P0=0x00;
Delay(50000);
P0=0xFF;
Delay(50000);
P0=0x00;
Delay(50000);
P0=0xFF;
/*
P0=0x00;
SEL_D1;
Delay(60000);
REL_D1;
SEL_D2;
Delay(60000);
REL_D2;
SEL_D3;
Delay(60000);
REL_D3;
SEL_D4;
Delay(60000);
REL_D4;
*/
}
void test_beep(void)
{
BEEP=0;
Delay(60000);
BEEP=1;
Delay(50000);
BEEP=0;
Delay(60000);
BEEP=1;
}
char check_K3(void)
{
if(KEY3==0)
{
Delay(2000);
{
if(KEY3==0)
{
return 1;
}
}
}
return 0;
}
char check_K4(void)
{
if(KEY4==0)
{
Delay(2000);
{
if(KEY4==0)
{
return 1;
}
}
}
return 0;
}
char check_K5(void)
{
if(KEY5==0)
{
Delay(2000);
{
if(KEY5==0)
{
return 1;
}
}
}
return 0;
}
code uchar dis1[] = {" www.52eda.com "} ;
code uchar dis2[] = {"WELCOME TO 52EDA\n"} ;
code uchar send_txt[]={"测试程序到此结束,OK!\n需要帮助请登陆:\nwww.52eda.com\n"};
void test_serial()
{
int i;
EA=0;
for(i=0;i<sizeof(send_txt);i++)
{
SBUF=send_txt[i];
while(TI==0);
TI=0;
}
EA=1;
}
char key1_flag=0;
char key2_flag=0;
void ext_int0() interrupt 0 //外部中断0服务程序
{
EA = 0;
Delay(4000);
key1_flag=1;
EA = 1;
}
void ext_int1() interrupt 2 //外部中断1服务程序
{
EA = 0;
Delay(4000);
key2_flag=1;
EA = 1;
}
//中断源编号为4,即串口中断
void getch(void) interrupt 4
{
uchar m;
EA=0;
//清除中断标志,硬件置位,软件清零
RI=0;
//接受串口缓冲区数据
m=SBUF;
if(m==0x80)
{
test_serial();
}
//通过串口缓冲区向外发送数据
//SBUF=m;
//判断是否发送结束:TI==1为结束
//while(TI==0);
//发送结束标志清零
//TI=0;
EA=1;
}
/*
code char num_data[]={"0123456789"};
void send_serial_data(char dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
*/
/*
void longdelay(uchar s) //长延时
{
while(s--)
{
_delay(60) ;
}
}
*/
void _delay(uchar ms)
{ // 延时子程序
uchar i ;
while(ms--)
{
for(i = 0 ; i<250;i++) ;
}
}
/*
BOOL lcd_bz()
{ // 测试LCD忙碌状态
BOOL result ;
rs = 0 ;
rw = 1 ;
ep = 1 ;
result = (BOOL)(P0 & 0x80) ;
ep = 0 ;
return result ;
}
*/
void lcd_wcmd(uchar cmd)
{ // 写入指令数据到LCD
//while(lcd_bz()) ;
_delay(1);
rs = 0 ;
rw = 0 ;
ep = 0 ;
P0 = cmd ;
ep = 1 ;
ep = 0 ;
}
void lcd_pos(uchar pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80) ;
}
void lcd_wdat(uchar dat)
{ //写入字符显示数据到LCD
//while(lcd_bz()) ;
_delay(1);
rs = 1 ;
rw = 0 ;
ep = 0 ;
P0 = dat ;
ep = 1 ;
ep = 0 ;
}
void lcd_init()
{ //LCD初始化设定
lcd_wcmd(0x38) ; //function set
_delay(1) ;
lcd_wcmd(0x38) ; //function set
_delay(1) ;
lcd_wcmd(0x08) ; //display on/off
_delay(1) ;
lcd_wcmd(0x01) ; //清除LCD的显示内容
_delay(1) ;
lcd_wcmd(0x06) ; //entry mode set
_delay(1) ;
lcd_wcmd(0x0c) ; //entry mode set
_delay(1) ;
}
void display(uchar pos, uchar *q)
{
uchar i ;
//lcd_wcmd(0x01) ; //clear
_delay(10) ;
lcd_pos(pos) ;
for(i=0 ;i<16;i++)
{
lcd_wdat(*q) ;
q++ ;
_delay(60) ;
}
}
void test_lcd(void)
{
CE573=0; //1
display(0x00,dis1) ;
display(0x40,dis2) ;
display(0x14,dis1) ;
display(0x54,dis2) ;
P0=0xFF;
CE573=1; //0
}
main()
{
initmpu();
lcd_init();
Delay(10000);
test_led();
test_digseg();
test_beep();
test_lcd();
test_serial();
while(1)
{
if(key1_flag)
{
key1_flag=0;
P0=digseg[1];
P1=0xFE;
}
else if(key2_flag)
{
key2_flag=0;
P0=digseg[2];
P1=0xFC;
}
else if(check_K3())
{
P0=digseg[3];
P1=0xF8;
}
else if(check_K4())
{
P0=digseg[4];
P1=0xF0;
}
else if(check_K5())
{
P0=digseg[5];
P1=0xE0;
}
SEL_D1;
_delay(600);
REL_D1;
_delay(600);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -